每天在特定时间在Unix中运行shell脚本


2

我有一个shell脚本 task.sh 这需要在每天特定时间在Unix的后台运行。

我知道 nohup 在后台运行脚本很有用。但是担心如何安排此脚本在指定时间每天运行。

注意: 我不是root用户。我没有权限 crontab 命令。

任何帮助将不胜感激。

Answers:


2

正确的方法是使用Crontab - 如果您无权访问您的crontab,您真的应该与您的管理员联系 - 他们可能不希望您运行预定的工作。也就是说,在您说没有crontab命令的权限之前,请尝试运行“crontab -e” - 每个用户都有自己的cron文件,而crontab将尝试编辑您的cron文件。 (我注意到当我作为用户运行crontab时它只是冻结)

您可以通过添加“&”来完成在后台运行的任何工作。工作的性格。我会反对这一点,但你可以在while循环中编写一个脚本来检查时间,然后等待一分钟,再次检查等,如果匹配则执行命令。您可以使用&运行此脚本在后台运行它。你也可能因颠覆系统而陷入困境....

查找的另一个命令是“屏幕”。这允许您从控制台连接和分离终端 - 它可以是在后台运行某些东西的有用方法,但能够查看并与之交互(您可以在前台执行屏幕,然后执行程序,然后分离从屏幕,然后重新连接)

编辑

一个脚本,用于检查每分钟一次的时间并在适当的时间运行命令:

#! /bin/bash

RUNAT="07:54"

while [ 1 ]
do
    DATE=`/bin/date +%H:%M`
    if [ $DATE. = $RUNAT. ]
    then
        /path/to/script.sh
    fi

    sleep 60
done

将其保存为(例如)mycron.sh,chmod 755 mycron.sh以便执行, 修改RUNAT行以在需要运行脚本时触发,然后将此脚本作为mycron.sh&执行。所以它在后台运行。

这个脚本不会导致任何堆栈溢出,因为它每天只执行一次命令,它不会“链接自己”


crontab -e 也是不允许的。正如您建议使用while循环编写脚本,这不会导致堆栈溢出吗?你提到“等一下”,就意味着要用 sleep
learner1

我用适当的脚本和使用说明修改了我的答案 - 是的,它使用sleep,不会导致堆栈溢出。
davidgo

非常感谢@davidgo。脚本很好用。但我担心资源(内存,CPU)利用率。如果我永远不会杀死这份工作,会不会对资源产生任何不利影响?
learner1

排除你运行的脚本 - 我无法评论 - 脚本使用的资源在任何现代PC或服务器上都可以忽略不计,并且可能无法辨别(除了它在进程列表中的外观等 - 它不是隐秘的),更不用说任何后果了。
davidgo

1

只要您有权访问 (不太可能 cron的 不可用,但值得一试)你可以模仿简单的cron工作。最简单的方法是make 在给定时间运行脚本,然后让脚本生成 必须运行时再次运行。

在我的示例中,脚本仅写入其上次运行的时间戳并执行一分钟的时间:

/tmp$ cat cronbyat.sh
#!/bin/sh


echo "last run: `date +%Y%m%d-%H%M%S`" >> /tmp/cronbyat.log

echo "/tmp/cronbyat.sh" | at now + 1 minute

/tmp$ echo "/tmp/cronbyat.sh" | at now + 1 minute
warning: commands will be executed using /bin/sh
job 5 at Mon Feb 15 09:00:00 2016
/tmp$ tail -f /tmp/cronbyat.log
last run: 20160215-090000
last run: 20160215-090100
last run: 20160215-090200
last run: 20160215-090301
last run: 20160215-090400
^C
/tmp$ atq
10      Mon Feb 15 09:05:00 2016 a lx
/tmp$ atrm 10
/tmp$ atq
/tmp$

当不再需要脚本时,必须终止其当前作业,如最后一行所示。 不幸的是,如果由于任何原因错过了一次运行,链条就会被打破。因此,应该给出并检查某种反馈。


感谢@Gombai的逻辑。很抱歉地说 命令也是不允许使用的。但我认为我从逻辑中得到了线索。
learner1
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.