首页 文章

如何记录cron作业?

提问于
浏览
165

我想知道如何确切地看到cron作业在每次执行时的作用 . 日志文件位于何处?或者我可以将输出发送到我的电子邮件吗?我已经设置了电子邮件地址,以便在cron作业运行时发送日志,但我还没有收到任何信息 .

7 回答

  • 50
    * * * * * myjob.sh >> /var/log/myjob.log 2>&1
    

    将所有输出从cron作业记录到/var/log/myjob.log

    您可以使用 mail 发送电子邮件 . 大多数系统会通过电子邮件将未处理的 cron 作业输出发送给root或相应的用户 .

  • 9

    默认情况下,cron会记录到/ var / log / syslog,因此您可以使用以下命令查看与cron相关的条目:

    grep CRON /var/log/syslog
    

    https://askubuntu.com/questions/56683/where-is-the-cron-crontab-log

  • 9

    这是我的代码:

    * * * * * your_script_fullpath >> your_log_path 2>&1
    
  • 1

    至少有三种不同类型的日志记录:

    • 执行程序之前的日志记录,只记录cronjob TRIED以执行命令 . 那个位于/ var / log / syslog中,正如@Matthew Lock已经提到的那样 .

    • 在程序尝试执行后记录错误,可以发送到电子邮件或文件,如@ Spliffster所述 . 我更喜欢登录到文件,因为有了电子邮件,那么你有一个新的问题来源,并检查电子邮件发送和接收是否完美 . 有时是,有时不是 . 例如,在一个简单的常见桌面计算机中,您对配置smtp不感兴趣,有时您更喜欢记录到文件:

    * * * *  COMMAND_ABSOLUTE_PATH > /ABSOLUTE_PATH_TO_LOG 2>&1
    
    • 我还会考虑检查/ ABSOLUTE_PATH_TO_LOG的权限,并从该用户的权限运行该命令 . 仅用于验证,同时测试它是否可能是潜在的问题来源 .

    • 程序本身的记录,具有自己的错误处理和记录以进行跟踪 .

    cronjobs存在一些常见问题:*要执行的二进制文件的ABSOLUTE PATH . 当你从shell运行它时,它可能会工作,但cron进程似乎使用另一个环境,因此如果你不使用绝对路径它并不总是找到二进制文件 . *二进制文件使用的库 . 它或多或少与前一点相同,但要确保,如果只是简单地输入命令的名称,就是指使用相同库的二进制文件,或者更好,检查您使用绝对路径引用的二进制文件与您直接使用控制台时引用的内容完全相同 . 可以使用locate命令找到二进制文件,例如:

    $locate python
    

    确保您将引用的二进制文件与您在shell中调用的二进制文件完全相同,或者只是使用您计划放入cronjob的绝对路径在shell中再次测试 .

    • 问题的另一个常见问题是cronjob中的语法 . 请记住,您可以使用特殊字符列表(逗号),定义范围(破折号 - ),定义范围增量(斜杠)等 . 看一下:http://www.softpanorama.org/Utilities/cron.shtml
  • 262

    在Ubuntu上,您可以启用 cron.log 文件以仅包含CRON条目 .

    取消注释在 /etc/rsyslog.d/50-default.conf 文件中提及 cron 的行:

    #  Default rules for rsyslog.
    #
    
    #                       For more information see rsyslog.conf(5) and /etc/rsyslog.conf
    
    #
    # First some standard log files.  Log by facility.
    #
    auth,authpriv.*                 /var/log/auth.log
    *.*;auth,authpriv.none          -/var/log/syslog
    #cron.*                          /var/log/cron.log
    

    保存并关闭该文件,然后重新启动 rsyslog 服务:

    sudo systemctl restart rsyslog
    

    您现在可以在自己的文件中看到cron日志条目:

    sudo tail -f /var/log/cron.log
    

    样本输出:

    Jul 18 07:05:01 machine-host-name CRON[13638]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
    

    但是,您将看不到有关在 /etc/cron.daily/etc/cron.hourly 内实际运行的脚本的更多信息,除非这些脚本将输出定向到cron.log(或者可能是某些其他日志文件) .

    如果要验证crontab是否正在运行而不必在 cron.logsyslog 中搜索它,请创建一个crontab,将输出重定向到您选择的日志文件 - 如下所示:

    # For more information see the manual pages of crontab(5) and cron(8)
    #
    # m h  dom mon dow   command
    30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log 2>&1
    

    采取的步骤:https://www.cyberciti.biz/faq/howto-create-cron-log-file-to-log-crontab-logs-in-ubuntu-linux/

  • 3

    如果你用sudo运行一些命令,它将不允许它 . Sudo需要一个tty .

  • 1

    cron 已经将其运行的每个作业的标准输出和标准错误发送给cron作业的所有者 .

    您可以使用 crontab 文件中的 MAILTO=recipient 将电子邮件发送到其他帐户 .

    为此,您需要让邮件正常工作 . 发送到本地邮箱通常不是问题(事实上,很可能会发现你已经收到了一些邮箱),但是将它从包装盒中取出并进入互联网需要MTA(Postfix,Sendmail,你有什么)正确配置连接到世界 .

相关问题