一尘不染

CronJob没有运行

linux

我通过键入crontab -e在ubuntu环境中为root用户设置了cronjob

  34 11 * * * sh /srv/www/live/CronJobs/daily.sh
  0 08 * * 2 sh /srv/www/live/CronJobs/weekly.sh
  0 08 1 * * sh /srv/www/live/CronJobs/monthly.sh

但是cronjon不会运行。我已经尝试检查cronjob是否正在使用

pgrep cron

并给出了进程ID3033。shell脚本调用了python文件,并用于发送电子邮件。可以运行python文件。没有错误,但cron不运行。daily.sh文件中包含以下代码。

python /srv/www/live/CronJobs/daily.py
python /srv/www/live/CronJobs/notification_email.py
python /srv/www/live/CronJobs/log_kpi.py

阅读 304

收藏
2020-06-02

共1个答案

一尘不染

WTF ?! 我的cronjob无法运行?

这是调试未运行cronjobs的清单指南:

  1. Cron守护程序正在运行吗?
    • 运行ps ax | grep cron并查找cron。
    • Debian:service cron startservice cron restart
  2. cron在工作吗?
    • * * * * * /bin/echo "cron works" >> /tmp/file
    • 语法正确吗?见下文。
    • 您显然需要对将输出重定向到的文件具有写权限。/tmp当前不存在的唯一文件名应始终可写。
  3. 该命令是独立运行的吗?
    • 通过在CLI上进行空运行来检查脚本是否有错误
    • 测试命令时,请以您正在编辑crontab的用户身份进行测试,该用户可能不是您的登录名或root
  4. cron可以胜任您的工作吗?
    • 检查/var/log/cron.log/var/log/messages是否有错误。
    • Ubuntu: grep CRON /var/log/syslog
    • 红帽: /var/log/cron
  5. 检查权限
    • 在命令上设置可执行标志: chmod +x /var/www/app/cron/do-stuff.php
    • 如果将命令的输出重定向到文件,请验证您是否有权写入该文件/目录
  6. 检查路径
    • 检查她刘海/ hashbangs线
    • 不要依赖PATH之类的环境变量,因为在cron下它们的值可能与在交互式会话下不一样
  7. 调试时不要抑制输出
    • 常用的是这种抑制: 30 1 * * * command > /dev/null 2>&1
    • 通过>/dev/null 2>&1完全删除重新启用标准输出或标准错误消息输出;或重定向到您具有写访问权的位置的文件:>>cron.out 2>&1将标准输出和标准错误附加到cron.out调用用户的主目录中。

还是行不通? kes!

  1. 提升cron调试级别
    • 德比安
    • /etc/default/cron
    • EXTRA_OPTS="-L 2"
    • service cron restart
    • tail -f /var/log/syslog 查看执行的脚本
    • 的Ubuntu
    • /etc/rsyslog.d/50-default.conf
    • 添加或注释掉行 cron.crit /var/log/cron.log
    • 重新加载记录器 sudo /etc/init.d/rsyslog reload
    • 重新运行cron
    • 打开/var/log/cron.log并查找详细的错误输出
    • 提醒:调试完成后,停用日志级别
  2. 运行cron并再次检查日志文件

Cronjob语法

# Minute  Hour  Day of Month      Month         Day of Week    User Command    
# (0-59) (0-23)   (1-31)    (1-12 or Jan-Dec) (0-6 or Sun-Sat)

    0       2       *             *                *          root /usr/bin/find

此语法 仅对root用户正确。普通用户crontab语法没有“ 用户” 字段(不允许普通用户像其他任何用户一样运行代码);

# Minute  Hour  Day of Month      Month         Day of Week    Command    
# (0-59) (0-23)   (1-31)    (1-12 or Jan-Dec) (0-6 or Sun-Sat)

    0       2       *             *                *          /usr/bin/find

Crontab命令

  1. crontab -l
    • 列出所有用户的cron任务。
  2. crontab -e,针对特定用户: crontab -e -u agentsmith
    • 开始您的crontab文件的编辑会话。
    • 退出编辑器时,将自动安装修改后的crontab。
  3. crontab -r
    • 从cron后台处理程序中删除您的crontab条目,但从crontab文件中删除。
2020-06-02