验证crontab是否有效


82

我想验证某个crontab是否正常工作。我添加了这样的工作:

  */2 * * * * /path_to_my_php_script/info.php >/dev/null 2>&1

我知道我重定向到空设备,但是我不确定上面的命令是否正确。

*编辑1:每两分钟在我的/ var / log / syslog中,我出现以下错误:

 (CRON) error (grandchild #2788 failed with exit status 2)

*编辑2:此新作业在日志中没有错误:

 */2 * * * * /usr/bin/php /path_to_my_php_script/info.php >/dev/null 2>&1

不幸的是,以上所有方法都尝试过,但对我不起作用。如您所说的试用/ bin / sh -c“(export PATH = / bin; /tmp/trial.sh </ dev / null)”显示以下消息,不确定是/ bin / sh是什么:PATH = / bin :不是标识符

Answers:


73

crontab条目的语法看起来正确。确实,如果您使用“ crontab -e”(应按要求)编辑crontab,则无论如何如果指定语法上无效的crontab条目,都会出现错误。

  1. 首先,是否/path_to_my_php_script/info.php可以从命令行正确运行?

  2. 如果是这样,它是否也可以像这样正确运行?:

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null)"
    
  3. 如果可行,是否可以这样工作?

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null >/dev/null 2>&1)"
    

步骤(3)与cron将如何运行程序类似(如“ man 5 cron”中所述)。

您遇到的最可能的问题是,cron用于运行程序的PATH过于严格。因此,您可能希望在crontab条目的顶部添加以下内容(您需要在脚本所需的任何目录中添加):

PATH=~/bin:/usr/bin/:/bin

另请注意,cron默认情况下将使用/bin/sh,而不是bash。如果需要bash,请将其添加到crontab文件的开头:

SHELL=/bin/bash

请注意,这两个更改都会影响所有 crontab条目。如果只想为info.php程序修改这些值,则可以执行以下操作:

*/2 * * * * /bin/bash -c ". ~/.bashrc; /path_to_my_php_script/info.php"

还值得一提的是,在配置为“邮件”的系统(换句话说,已配置MTA [sendmail / postfix / etc]的系统)上,crontab程序的所有输出都会自动通过电子邮件发送给您。默认的Ubuntu桌面系统不会配置本地邮件,但是如果您在服务器上工作,则只需在终端中键入“ mail”即可查看所有这些cron邮件。这也适用于“ at”命令。


2
我第二步未获得许可。我该怎么办?
akikara

@akikara chmod + x ./cron.sh-显然用您要运行的文件位置替换./cron.sh
Tisch

46

尽管非常罕见,但即使服务正在运行,cron有时也会停止正常工作。这是验证crond是否正在运行以及停止/启动服务的方法。

在Linux上:

service crond status
service crond stop
service crond start

在Ubuntu和其他基于Debian的系统上:

service cron status
service cron stop
service cron start

13
只是注意...对于Ubuntu cron,不是,而是crond
Amit Kohli

32

不要将错误输出重定向到/ dev / null和grep / var / log / syslog以获得cron输出。

grep cron /var/log/syslog

编辑后保存文件/etc/crontab或其中的文件时,您可以立即显示错误/etc/cron.d/

tail -f /var/log/syslog | grep --line-buffered cron

如果修改正常,您只会看到该RELOAD通知,会出现如下错误

Jul 9 09:39:01 vm cron[1129]: Error: bad day-of-month; while reading /etc/cron.d/new 

18

您可以使用terminal命令查看活动的cron:

crontab -l

以下是按顺序排列的参数:

  1. 分钟(0-59)

  2. 小时(0-23)

  3. 每月的一天(1-31)

  4. 月(1-12)

  5. 星期几(0-6)(星期日= 0)

  6. 命令

因此,您每个小时的第一分钟都在调用脚本。为了测试目的,应该以更频繁的时间间隔测试输出:

* * * * * <command> #Runs every minute

这将每分钟调用一次!


* / 2 * * * *我现在更改为每两分钟一次
croppio.com 2011年


2

我相信您也可以使用run-partscron进行带外作业。实际上,cron使用它来运行定期的cron作业,因此,通过提供适当的参数,您可以随时运行它们。

如果您只想运行一个文件而不是例如中定义的所有cron作业,/etc/cron.daily则必须提供regex参数以及有效的regex。run-parts --list --regex '^p.*d$' /etc

请记住,cron作业通常不带扩展名而被命名为可执行文件,因此请确保您的脚本相似,尽管使用正则表达式可以允许您使用扩展名触发脚本。


1

啊!

我自己得到了答案,我检查了一下,但未crond在默认安装目录中找到该文件,即/etc/init.d/

现在将尝试答复。

注意-我没有检查cron.allowcron.deny太。到目前为止一切都很好。

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.