当前位置: 首页 » program » ubuntu » ubuntu 下定时任务crontab 总结

ubuntu 下定时任务crontab 总结

crontab 小总结。
--------------------------------------------分割线--------------------------------------
首先,如何编辑。
crontab -e 或者/etc/crontab (非ubuntu用户不用往下看了)
然后是编辑器选择,优先推荐vim.
命令行输入:sudo select-editor 选4 一般是vim.保存就是:wq就行。

下面是代码的撰写以及执行。
标准格式:
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly 可参照/etc/crontab
注意上面的17 *后面的是按tab键生成的。command路径要写对,绝对路径可能好一点。
如果你是crontab -e 编辑的,是如下格式:
*/30 * * * * /root/listen8100.sh > /dev/null 2>&1
没有使用者root用户的参数。
上面是每30分钟执行一次脚本。如果想找时间的参数写法百度就好,不再赘述。

下面是调试报错:
如果crontab未执行,一般通过查看日志就好。
首先,
sudo vim /etc/rsyslog.d/50-default.conf
cron.* /var/log/cron.log #将cron前面的注释符去掉
重启rsyslog
sudo service rsyslog restart
好了。日志开启。
然后重启cron服务。
sudo service cron restart 可以查看新加的计划任务。
报错有两种形式:
(1)crontab -e 完了之后就会提示语法错误,比如bad minute.... 参照上面的格式。例如tab是否写成了空格,command路径是否执行对了。bad minute就是分钟参数写错了。要写成/30每30分钟就对了。
(2)/var/log/cron.log报错:
这个会有以下几种常见错误提示:
1 May 20 08:29:01 myserver cron[3543]: Error: bad username; while reading /etc/crontab
May 20 08:29:01 myserver /usr/sbin/cron[3543]: (*system*) ERROR (Syntax error, this crontab file will be ignored)
语法错误,你的计划任务文件被忽略了兄弟。这里的错误是你没用指定用户执行。一般是root用户执行,注意你的脚本权限要给足。你看报错的时候注意看error后面的提示。
下面有个奇葩的错误:
Aug 2 17:31:26 314107 /usr/sbin/cron[1710]: (*system*) ERROR (Missing newline before EOF, this crontab file will be ignored)
Aug 2 17:31:26 314107 /usr/sbin/cron[1710]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
在eof 也就是结束符前丢失了新行。然后计划任务被跳过。奇怪嘛,老版ubuntu.10.04前的。现在server 12和14的多。
后来发现是时间错误:
时间会影响执行
timezone和localtime 都要一致
rm /etc/localtime
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
dpkg-reconfigure tzdata
tzselect
时区错误。真他么狗。出现奇葩错误的不妨试试。chinaunix看的解决方法。

2 No MTA installed, discarding output,这个其实算个警告。不算报错。
解决办法:
按照shell脚本的写法 /root/listen8100.sh 后面加上标准输出的代码。> /dev/null 2>&1 这段啥意思的话,百度下把兄弟。 复制能用就对了。
其实一般安装了邮件服务的话就不报这个错了。如果你没装报这个错也不要紧其实,不影响定时任务执行。但是你装了邮件服务器,就要注意了。

暂时就没什么大错了。
你的脚本不执行。首先看下面三个原因:重要的话说三遍
1 你的脚本权限。别尼玛给了个400还在哪儿哭天喊地的。还有是哪个用户执行的,一般是root用户。crontab在linux是缺省执行的。unix貌似也是。
2 你脚本参数。比如tab键 比如执行路径 妈蛋总有人这样写 cd/mnt cd/opt 然后说死活执行不了。我说cd /mnt cd /opt 你空格被吃了?
3 你可以在脚本里输出 查看执行情况的。比如 echo 'aaa' > /home/a.txt 看看输出没有。
最后有时候你要调试好了最好把cron日志关了。


下一篇 :

上一篇 :

暂无评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注