未登录时不执行 cronjob

Ste*_*tef 6 cron syslog

我的 crontab 中有一个 cronjob。

当我指定要在2分钟内执行的作业时,我等待,然后我可以看到作业创建的文件,我可以用ps看到进程。作业至少需要 10 分钟才能完成。

但是,如果我指定要在 2 分钟内执行的作业,然后我退出,几分钟后我又回来了,似乎该作业尚未执行(未创建文件,并且进程不在 ps 中)。

当我查看 /var/log/syslog 时,我可以看到作业“已开始”,但立即(同一秒)cron 尝试发送邮件。可能是带有结果的邮件。(好吧,sendmail 配置不正确,但这不应该是根本原因)。

你有什么主意吗 ?


下面是一些具体的例子:(python是我机器的名字)

我使用 crontab -e 编辑 crontab。
这是 crontab :

user@python:~$ crontab -l
[...]
# m h  dom mon dow   command

50 9 * * * /home/user/scripts_automated/crontab1.sh
Run Code Online (Sandbox Code Playgroud)

它应该在 9:50 运行

这是 /var/log/syslog 的内容:

[...]
Nov  6 09:48:02 python crontab[30913]: (user) BEGIN EDIT (user)
Nov  6 09:48:18 python crontab[30913]: (user) REPLACE (user)
Nov  6 09:48:18 python crontab[30913]: (user) END EDIT (user)
Nov  6 09:50:01 python CRON[30936]: (user) CMD (/home/user/scripts_automated/crontab1.sh)
Nov  6 09:50:01 python sendmail[30938]: sA68o1a4030938: from=user, size=347, class=0, nrcpts=1, msgid=<201411060850.sA68o1a4030938@python>, relay=user@localhost
[...]
Run Code Online (Sandbox Code Playgroud)

正如你在日志中看到的,我crontab在 09:48:02编辑了,然后我注销了。我回到机器上(使用ssh),该作业没有生成它应该生成的任何文件。

这是脚本的内容:

user@python:~$ cat scripts_automated/crontab1.sh


#  0  ------------------------------------------------------

datenow=`date +%F_%H-%M-%S`
/home/user/scripts_automated/script_1_cisco_grab.sh > /home/user/scripts_automated/crontab/run_${datenow}_.txt 2>&1 &
echo $! > /home/user/scripts_automated/crontab/pid_${datenow}.txt
ln -s /home/user/scripts_automated/crontab/pid_${datenow}.txt /home/user/scripts_automated/crontab/pid_last_run.txt
Run Code Online (Sandbox Code Playgroud)

并且没有生成文件。我至少希望该文件pid_${datenow}.txt与后台命令的 pid 一起存在。但没什么。如果我不注销,则脚本会执行、生成输出文件、pid_${datenow}文件等...

Ant*_*hon 6

您应该将脚本放在一个单独的目录中,该目录在 cron 作业运行时肯定可用,例如/usr/local/bin/.

写这样的crontab条目也是一个很好的习惯:

M H * * *  test -x /usr/local/bin/myscript.sh && /usr/local/bin/myscript.sh
Run Code Online (Sandbox Code Playgroud)

因此,如果脚本不可用,crontab 甚至不会尝试执行该脚本。


您怀疑注销是问题所在,您还应该尝试注销然后及时返回以便 crontab 运行然后观察。这样,如果注销是问题或未登录,您就可以缩小范围。