Linux下crontab定时任务服务

<?php

目录:
1.crontab相关工具概念
2.crontab相关命令
3.Crontab的基本组成
4.Crontab的配置文件格式
5.Crontab的日志
6.Crontab的常见错误

一、相关概念
cron job:周期执行的任务
cron table:周期执行列表

二、常用命令
usage:	crontab [-u user] file
	crontab [-u user] [ -e | -l | -r ]
		(default operation is replace, per 1003.2)
	-e	(edit user's crontab)
	-l	(list user's crontab)
	-r	(delete user's crontab)
	-i	(prompt before deleting user's crontab)
	-s	(selinux context)
说明:
crontab -u benbird -l 列出benbird用户的cron作业
crontab -u benbird -e 编辑benbird用户的cron作业
crontab -u benbird -r 移除benbird用户的所有cron作业
service crond status 查看crontab服务运行状态
tail -f /var/log/cron  查看最终生成的计划任务文件:
tail -f /tmp/date.txt  不断的显示某个文本文件最后的几行,用以监测脚本的运行情况(-f表示不断地,-3表示3行)

三、基本组成
系统服务crond    每分钟从配置文件中刷新定时任务
配置工具crontab  用于调整定时任务
配置文件         以文件的形式存放

四、crontab的配置文件格式
* * * * * command
分钟0~59 
小时0~23
日期1~31
月份1~12
星期0~7(0和7都表示周日)

案例:
每晚的21:30重启apache:30 21 * * * service httpd restart
每月的1、10、22号的4:45重启apache:45 4 1,10,22 * * service httpd restart
每月1-10号的4:45重启apache:45 4 1-10 * * service httpd restart
每隔2分钟重启apache:*/2 * * * * service httpd restart
每个小时的奇数分钟执行:1-59/2 * * * * service httpd restart
晚上11点到早上7点之间每隔1小时重启apache:0 23-7/1 * * * command
每天18:00到23:00之间每隔30分钟重启一次apache: 0,30 18-23 * * * command || 0-59/30 18-23 * * * command
*表示任何时候都匹配
A,B,C表示匹配A或者B或者C时执行命令
A-B表示A到B之间时执行命令
*/A表示每A分钟(小时)执行一次命令

五、Crontab配置文件
全局配置文件:/etc/crontab
在/etc/crontab目录下有一个目录cron.d作为对系统计划任务的补充,在这里添加的某个用户的定时任务会被执行,但是用命令crontab -l 是看不到的,用crontab -e也是不能编辑的。例如:
在cron.d中加入文件crontest:
sudo vi crontest
写入一个定时任务:*/1 * * * * cpt echo "File in /etc/cron.d/crontest"保存退出。
sudo tail -f /var/log/cron
能够看到这个定时任务被系统定时执行,但是用命令
sudo crontab -l 
你是看不到这个你添加的任务的,也就是说作为对系统级别的定时任务的补充,它也是属于系统级别的,用crontab是无法编辑和查看的,只能自己手动去修改这样的系统cron配置文件。
使用crontab -e -l命令操作的实际上是这个文件:/var/spool/cron/用户

六、crontab的日志:
位于/var/log/ 查看:
ls -l cron*
tail -f cron
也可以在/var/spool/mail 下tail -f 用户(例如cpt)查看部分的cron相关的日志信息,主要的日志信息在 /var/log/cron下,也可以通过tail查看。

七、Crontab常见错误
环境变量:位于/root/.bash_profile,要注意写脚本进行计划任务的时候这些预置的环境变量究竟是否被设置好。
命令行双引号中使用%时,未加反斜线\进行转义:
例如:下面那条正确的命令在命令行中直接执行时不要加 \ ,但是放在计划任务中的时候需要加上 \
第三和第五个域之间执行的是“或”操作:

例如:四月的第一个星期日的早晨1时59分执行脚本cpt.sh
    错误的命令:59 1 1-7 4 0  /root/cpt.sh
    正确的命令:59 1 1-7 4 * test `date +\%w` -eq 0 && /root/cpt.sh (解释一下命令 test `date +%w` 该命令用来获取周几 -eq 0为等于0即周日,即将该命令与1-7做了且关系,而放开了第五个域)
    错误原因:1-7和0是或关系,而我们期望的是且关系,即1-7号的某天并且这天周日,但是这样写却变成了1-7号或者周日都可以。

分钟设置错误:
例如:每两个小时运行一次date
    错误的命令:* 0,2,4,6,8,10,12,14,16,18,20,22 * * * date
    正确的命令:0 */2 * * * date
    错误原因:每个偶数小时的时候的每分钟都会执行。

常用技巧:
每半分钟执行一次命令(使用shell命令),在定时任务中最小执行时间是每一分钟
*/1 * * * * date >> /tmp/date.log
*/1 * * * * sleep 30s;date >> /tmp/date.log
tail -f /var/log/cron查看执行日志
tail -f /tmp/date.log可以看到每30秒输出一次时间

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值