网站首页 文章专栏 linux定时任务
查看是否安装crontab
[root]# rpm -qa | grep crontab
crontabs-1.11-6.20121102git.el7.noarch
一般都会带有,如过没有,可以yum安装
2.查找文件目录
[root]# whereis cron
cron: /etc/cron.deny /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly /etc/cron.d
cron.daily是每天执行一次的job
cron.weekly是每个星期执行一次的job
cron.monthly是每月执行一次的job
cron.hourly是每个小时执行一次的job
cron.d是系统自动定期需要做的任务
cron.deny文件就是用于控制不让哪些用户使用Crontab的功能
与这些文件在一起的有个 crontab,是设定定时任务执行文件
3.查找crond 可执行文件
[root]# which is crond
/usr/sbin/crond
4.进入到crond的目录开启crond服务
service crond start
如需加入开机启动,则在开机启动脚本/etc/rc.d/rc.local 加入/sbin/service crond start
以上是配置,以下是定时任务
crontab文件格式:
* * * * * command
minute hour day month week command
分 时 天 月 星期 命令
常见几个操作
* */2 * * * /usr/bin/curl http://www.xxx.com/Home/Auto/test 每两小时请求一次这个网址
30 21 * * * /usr/local/etc/rc.d/lighttpd restart 表示每晚的21:30重启lighttpd
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart 表示每月1、10、22日的4 : 45重启lighttpd
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart 表示每周六、周日的1 : 10重启lighttpd
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart 表示在每天18 : 00至23 : 00之间每隔30分钟重启lighttpd
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart 表示每星期六的11 : 00 pm重启lighttpd
* */1 * * * /usr/local/etc/rc.d/lighttpd restart 每一小时重启lighttpd
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart 晚上11点到早上7点之间,每隔一小时重启lighttpd
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart 每月的4号与每周一到周三的11点重启lighttpd
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart 一月一号的4点重启lighttpd
* 1 * * * /usr/bin/curl -o data/log/txt.txt http://www.abc.com 将网站内容写入txt.txt文件
crontab -e 命令,写入相应的语句即可
常见问题及处理办法扩展:
1.防卡死
使用 timeout,假设我们设定每个脚本最多执行时间位 200秒,超过 200秒 就自动死掉。
* * * * * timeout 200 php /home/app/email.php
2.防多次请求
如果这个脚本执行时间超过 60秒,下一分钟又会执行 php email.php,如果避免重复执行?
这样会出现,有两个进程同时在执行 php email.php,那会不会出现同一个任务被执行了两次?
解决办法:
使用 flock 进行互斥控制
用法: flock [选项] <文件|目录> <命令> [<参数>...] flock [选项] <文件|目录> -c <命令> flock [选项] <文件描述符号码>通过 shell 脚本管理文件锁。 选项: -s, --shared 获取共享锁 -x, --exclusive 获取排他锁(默认) -u, --unlock 移除锁 -n, --nonblock 失败而非等待 -w, --timeout <秒> 等待限定的时间 -E, --conflict-exit-code <数字> 冲突或超时后的退出代码 -o, --close 运行命令前关闭文件描述符 -c, --command <命令> 通过 shell 运行单个命令字符串 -F, --no-fork 执行命令时不 fork --verbose 增加详尽程度 -h, --help display this help -V, --version display version
我们用到其中的排他设置
* * * * * flock -xn /tmp/test.lock -c "timeout 200 php /home/app/email.php"
记录好日志
定时任务可能要记录日志呀,不然后期怎么排查
* * * * * flock -xn /tmp/test.lock -c "timeout 200 php /home/app/email.php >> /home/log/test.log 2>&1"
转载请注明出处