ROB*_*ROB 31 linux crontab ubuntu-12.04
我通过输入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
Run Code Online (Sandbox Code Playgroud)
但是cronjon不会跑.我已经尝试检查cronjob是否正在运行
pgrep cron
并提供进程ID 3033. 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
Run Code Online (Sandbox Code Playgroud)
Jen*_*och 109
WTF?我的cronjob不运行?!
这是一个调试不运行cronjobs的清单指南:
ps ax | grep cron寻找cron.service cron start或service cron restart* * * * * /bin/echo "cron works" >> /tmp/file/tmp当前不存在的唯一文件名应始终可写./var/log/cron.log或/var/log/messages错误.grep CRON /var/log/syslog/var/log/cronchmod +x /var/www/app/cron/do-stuff.php30 1 * * * command > /dev/null 2>&1还是行不通?哎呀!
>/dev/null 2>&1>>cron.out 2>&1cron.out/etc/default/cron 看到执行的脚本EXTRA_OPTS="-L 2"service cron restarttail -f /var/log/syslog/etc/rsyslog.d/50-default.conf并查找详细的错误输出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
Run Code Online (Sandbox Code Playgroud)
此语法仅对cron.crit /var/log/cron.log用户正确.常规用户sudo /etc/init.d/rsyslog reload语法没有User字段(不允许普通用户像其他任何用户一样运行代码);
# 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
Run Code Online (Sandbox Code Playgroud)
Crontab命令
/var/log/cron.log
root,对于特定用户: crontab
crontab -l
最后我找到了解决方案.以下是解决方案: -
永远不要在python脚本中使用相对路径来通过crontab执行.我做了类似的事情: -
import os
import sys
import time, datetime
CLASS_PATH = '/srv/www/live/mainapp/classes'
SETTINGS_PATH = '/srv/www/live/foodtrade'
sys.path.insert(0, CLASS_PATH)
sys.path.insert(1,SETTINGS_PATH)
import other_py_files
Run Code Online (Sandbox Code Playgroud)永远不要压缩crontab代码而是使用mailserver并检查用户的邮件.这样可以更清晰地了解正在发生的事情.
小智 6
我想补充两点我学到的:
参考:
crontab失败的另一个原因:%字符的特殊处理。
从man文件中:
The entire command portion of the line, up to a newline or a
"%" character, will be executed by /bin/sh or by the shell specified
in the SHELL variable of the cronfile. A "%" character in the
command, unless escaped with a backslash (\), will be changed into
newline characters, and all data after the first % will be sent to
the command as standard input.
Run Code Online (Sandbox Code Playgroud)
在我的特定情况下,我date --date="7 days ago" "+%Y-%m-%d"习惯于为脚本生成参数,并且它默默地失败了。当我检查syslog并看到命令在%符号处被截断时,我终于发现发生了什么。您需要这样逃避它:
date --date="7 days ago" "+\%Y-\%m-\%d"
Run Code Online (Sandbox Code Playgroud)
请参阅此处以获取更多详细信息:
http://www.ducea.com/2008/11/12/using-the-character-in-crontab-entries/
| 归档时间: |
|
| 查看次数: |
83634 次 |
| 最近记录: |