Crontab定时任务
如果想深入了解(google not use), 我们应该看哪些文档
• cron(8) is the daemon that executes scheduled commands.
• crontab(1) is the program used to modify user crontab(5) files.
• crontab(5) is a per user file that contains instructions for cron(8).
如何设置crontab
这个其实很简单
备用脚本
#service.sh 这个(点.)有可能出问题(由于run-parts造成的), 可以更名为servicsh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin #还有可能是path变量不对, 可以设置path变量.
cd /data/www/gitm/tb/code
/usr/local/bin/php /data/www/gitm/tb/code/service.php >> /data/www/gitm/tb/code/logs/$(date -d "today" +"%Y%m%d_%H%M%S")outs.log #改为每次生成一个新的文件
正常设置
crontab -e #如果是这样设置的话, 可以用下面一句.
crontab -l #查看是否正常任务列表里面有.
* * * * * env > /tmp/env.output #第一步先测试一下, crontab是否正常执行, 因此, 把上面一句加进去, 不论是/etc/crontab 还是 crontab -e
*/1 * * * * /etc/crontabs-enable/service.sh #真正使用, 这么一句话就ok了.
开机启动
/etc/crontab #里面指定/etc/crontabs-enable/service.sh
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin #还有可能是path变量不对, 可以设置path变量.
MAILTO=machangkun@g-go.cn
HOME=/
*/1 * * * * root run-parts /etc/crontabs-enable #就是这里指定的执行目录.
/etc/init.d/crond restart #重新启动服务, 才能生效
重启动/启动cron服务
sudo/etc/init.d/crond restart #重启cron #cron可以换成crond
sudo service crond restart #也是重启cron #start可以换成restart
vi /etc/init.d #编辑这个文件也可以启动cron
如何确认crontab正常运行
看log
#查看log, 从尾部查看最新的.
tail -n 5 xxx.log
tail xxx.log 默认显示10条.
log位置
- /var/log/cron*
- /var/log/syslog,
- /var/log/messages
- /var/cron/log
输出log和log设置
- 看log和输出 shell脚本»定向输出. php脚本写好log, 并且指定errorlog.
0 * * * * /home/abliskovs/update/update.sh 2>&1 /tmp/testlog.log # 2>&1 是把成功和失败都输出到testlog.log
- 启动cron的log, /etc/rsyslog.d/50*的那个文件,将cron 的注释去掉,重启syslog进程,就形成日志了.
crontab各种奇怪问题
- 据说crontab的文件里面, 最后要有一个回车, 没有回车, 则那一行就不执行. 换句话说, 最后需要有一个空行.
- cron.d/, cron.daily/, cron.hourly/ 这三个目录里面的shell文件, 文件名不能有点, 因此[service.sh]必须重命名[service]
#!/bin/bash #据说这是一个有用的声明.
bash -c "mybashcommand" # 同上
SHELL=/bin/bash #同上
参考(真全): [http://serverfault.com/questions/449651/why-is-my-crontab-not-working-and-how-can-i-troubleshoot-it]
看系统执行情况, 这个部分相当独立, 单独写另一个blog吧
ps -ef | grep cron | grep -v grep #检查是否crontab正常运行. 根据结果决定是否重启(cron或者crond)
pgrep cron #用这句能看到cron是否执行.
系统任务的方法
fg #切换到前台
⌃+z #挂起程序
bg #切换到后台
参考: http://song49.blog.51cto.com/4480450/1029674
参考: http://my.oschina.net/u/2397255/blog/729604