当前位置: 首页 > 面试题库 >

CronJob没有运行

梁存
2023-03-14
问题内容

我通过键入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

问题答案:

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文件的编辑会话。
    • 退出html" target="_blank">编辑器时,将自动安装修改后的crontab。
  3. crontab -r
    • 从cron后台处理程序中删除您的crontab条目,但从crontab文件中删除。


 类似资料:
  • 我已经向EC2实例附加了一个新卷。卷已成功附加。位于命令输出下面。 DF-H

  • 问题内容: 我试图做一个cron并每5分钟运行一个网址。 我尝试使用WGET,但是我不想在服务器上下载文件,我只想运行它即可。 这是我使用的(crontab): 除了wget之外,是否还有其他命令可以使用以运行url而不下载它? 问题答案: 您可以告诉wget不要以几种不同的方式下载内容: 这只会执行HEAD要求,但可能会做你想做的 这会将输出保存到/ dev / null(黑洞) 您可能也想看看

  • Cron Job 管理基于时间的 Job,即: 在给定时间点只运行一次 周期性地在给定时间点运行 一个 CronJob 对象类似于 crontab (cron table)文件中的一行。它根据指定的预定计划周期性地运行一个 Job,格式可以参考 Cron 。 前提条件 当前使用的 Kubernetes 集群,版本 >= 1.8(对 CronJob)。对于先前版本的集群,版本 < 1.8,启动 AP

  • 我有一个后端nodeJS应用程序运行在kubernetes集群。现在我想运行两个cron作业计划每个月。cron作业在一个JS文件中。如何使用库伯内特斯创建一个作业,在每个月运行该服务的pod中运行这些JS文件? 此链接提供了对其工作原理的基本理解,但我对如何为特定服务和特定Pod运行它有点困惑 https://kubernetes.io/docs/concepts/workloads/contr

  • 我的JApplet在DrawOvalInputs时产生错误。html运行并调用DrawOvalInputs的类文件。到目前为止,我只能将其作为一个实际应用程序使用(这就是为什么main在块引用中)。 我对这个程序的目标是能够在 java 控制台上运行一个.html文件以中等安全设置启动 JApplet,但无论我做什么,它都无法运行。 在来这里之前,我已经浏览了相当多的网页和搜索。遗憾的是,我就是想