【问题标题】:How to know if Crontab is working?如何知道 Crontab 是否正常工作?
【发布时间】:2016-06-15 22:23:53
【问题描述】:

我正在尝试运行一个简单的 crontab(在 mac OSX 终端上)

我的 cronjob 看起来像这样:

* * * * * /Users/tanavya.dimri/Documents/cron.sh

cron.sh:

#!/bin/bash
cd /Users/tanavya.dimri/Documents
python hello.py > empty

而 hello.py 很简单

print "Hello"

当我运行sh cron.sh 时,它就可以工作。 Empty 只是一个空的文本文件,它确实被更改为“Hello”。 但是,我真的不知道它是否与 crontab 一起使用,因为在我从中删除 hello 后文件并没有改变。

【问题讨论】:

  • 删除文件后尝试。如果 crontab 运行,它应该创建它。
  • 骗子不会知道您的.profile.bashrc 的设置。也许您遗漏了一些东西,例如更改 PATH 以便可以找到 pythom。

标签: python shell cron crontab


【解决方案1】:

默认情况下,cronjobs 登录到/var/log/syslog

因此,您可以简单地 grep 该日志 CRON 并检查您的作业执行情况:

grep CRON /var/log/syslog

【讨论】:

    【解决方案2】:

    删除文件后尝试。如果 crontab 运行,它应该创建它

    有一种方法可以检查您的 crontab 作业是否成功运行。请注意,cron 命令中的日志文件引用是使用完整路径而不是相对路径给出的。您需要确保您的脚本使用完整路径或 cd 到正确的工作目录。

    Crontab Log: How to Log the Output of My Cron Script

    假设您已将 backup.sh 添加到您的 crontab 中,如图所示 每天午夜执行。

    $ crontab -e 59 23 * * * /home/john/bin/backup.sh
    

    要验证此作业是否成功执行,请检查 /var/log/cron 文件,其中包含有关所有 cron 的信息 在您的系统中执行的作业。正如你从下面看到的 输出,john 的 cron 任务执行成功。

    $ tail /var/log/cron
    Oct  8 22:00:00 dev-db crond[18340]: (root) CMD (/bin/sh /home/root/bin/system_check &)
    Oct  8 23:00:00 dev-db crond[20348]: (oracle) CMD (/bin/sh /home/oracle/bin/cleanup.sh &)
    Oct  8 23:59:00 dev-db crond[20399]: (john) CMD (/bin/sh /home/john/bin/backup.sh &)
    

    Cron 日志包含以下信息:

    时间戳 – cron 作业执行的日期和时间

    Hostname – 服务器的主机名(例如 dev-db)

    cron 守护进程名称和 PID。例如,crond[20399]

    用户名 - 执行此 cron 作业的用户名。为了 例如,约翰。

    CMD – 后面的任何内容都是实际执行的命令 那个时候。

    如果 backup.sh 中有任何 echo 语句,您可能需要 将它们记录到文件中。一般来说,如果backup.sh cron脚本 抛出任何输出(包括错误),您可能希望将它们记录到 日志文件。为此,请修改 crontab 条目并添加输出和 错误重定向如下图。

    $ crontab -e 59 23 * * * /home/john/bin/backup.sh > /home/john/logs/backup.log 2>&1
    

    在上面:

    /home/john/logs/backup.log 表示标准输出 backup.sh 脚本将被重定向到 backup.log 文件。

    2>&1 表示标准错误(2>)被重定向到同一个 标准输出 (&1) 指向的文件描述符。

    因此,标准输出和错误都将被重定向到 /home/john/logs/backup.log

    【讨论】:

    • @AlexStone 你是否使用了你想要文件的完整路径来确保它被放置在正确的位置?
    • @AlexStone 我添加了一些我需要做的更多细节。
    • 感谢您的详细回答,但是当我执行 tail /var/log/cron 时,我得到“没有这样的文件或目录”。但是我删除了“空”文件,通过执行 chmod 700 cron.sh 为文件添加了 chmod 700 权限,现在它可以工作了。不过谢谢;)
    【解决方案3】:

    首先检查您是否对 cron.sh 文件有足够的权限。

    chmod 755 cron.sh
    

    然后修改您的 crontab 以定期运行(即 1 分钟):

     */1 * * * * /Users/tanavya.dimri/Documents/cron.sh
    

    【讨论】:

      猜你喜欢
      • 2011-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-23
      • 1970-01-01
      • 2023-03-24
      • 2014-09-28
      • 1970-01-01
      相关资源
      最近更新 更多