验证 crontab 是否有效

cro*_*com 111 cron

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

  */2 * * * * /path_to_my_php_script/info.php >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

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

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

 (CRON) error (grandchild #2788 failed with exit status 2)
Run Code Online (Sandbox Code Playgroud)

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

 */2 * * * * /usr/bin/php /path_to_my_php_script/info.php >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

use*_*817 85

尽管非常罕见,但有时即使服务正在运行,cron 也会停止正常工作。以下是如何验证 crond 正在运行并停止/启动服务。

在 Linux 上:

service crond status
service crond stop
service crond start
Run Code Online (Sandbox Code Playgroud)

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

service cron status
service cron stop
service cron start
Run Code Online (Sandbox Code Playgroud)

  • 在我的机器上似乎是`/etc/init.d/cron status`。 (2认同)

jam*_*unt 83

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)"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 如果这有效,它是这样工作的吗?

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

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

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

PATH=~/bin:/usr/bin/:/bin
Run Code Online (Sandbox Code Playgroud)

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

SHELL=/bin/bash
Run Code Online (Sandbox Code Playgroud)

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

*/2 * * * * /bin/bash -c ". ~/.bashrc; /path_to_my_php_script/info.php"
Run Code Online (Sandbox Code Playgroud)

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

  • 我的第二步被拒绝了。我该怎么办? (2认同)

rub*_*ojr 36

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

grep cron /var/log/syslog
Run Code Online (Sandbox Code Playgroud)

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

tail -f /var/log/syslog | grep --line-buffered cron
Run Code Online (Sandbox Code Playgroud)

如果编辑没问题,你只会看到RELOAD通知,错误会发生

Jul 9 09:39:01 vm cron[1129]: Error: bad day-of-month; while reading /etc/cron.d/new 
Run Code Online (Sandbox Code Playgroud)


bio*_*ark 22

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

crontab -l
Run Code Online (Sandbox Code Playgroud)

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

  1. 分钟 (0 - 59)

  2. 小时 (0 - 23)

  3. 每月的第几天 (1 - 31)

  4. 月 (1 - 12)

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

  6. 命令

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

* * * * * <command> #Runs every minute
Run Code Online (Sandbox Code Playgroud)

这将每分钟调用一次!


Ash*_*rpe 11

对于每一行的时间部分,您可以使用此cron 测试器来测试/验证您的 cron 时间定义。

  • 也有用:http://www.crontab-generator.org/ (2认同)

Joã*_*ira 7

老问题和许多复杂的答案。最简单的方法是将此行添加到您的 crontab

* * * * * /bin/bash -l -c 'date > ~/cron-test.txt'
Run Code Online (Sandbox Code Playgroud)

它只会每分钟将当前日期写入文件 ~/cron-test.txt

然后您只需运行cat ~/cron-test.txt并检查显示的日期是否是当前日期。如果是 crontab 工作正常。