运行linux后,开机自启动crond任务,系统会每分钟检查是否有要执行的任务工作(循环检测)
默认系统中可以登陆的用户,都可以使用crontab定义计划任务。
cron执行的每一项工作都会被纪录到/var/log/cron这个日志文件中,可以从这个文件查看命令执行的状态。
cron服务的启动关闭
启动:service crond start
停止:service crond stop
重启:service crond restart
查看状态:service crond status
重新载入配置:service crond reload
crontab支持两种状态:
a.直接编写计划任务;(crontab -e)
b.使用目录的方式,放在目录里面的都会定时执行,定时目录可在/etc/crontab中设定。
可以通过/etc/cron.allowh和/etc/cron.deny文件限制权限,/etc/cron.allow优先于/etc/cron.deny配置,下面为Centos6.5下的测试
拒绝测试
允许测试
crontab用法:
crontab [-u user] [-e | -l | -r]
-e //编辑当前用户的定时任务
-l //查看当前用户的定时任务
-r //删除定时任务
-u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
比如说root查看自己的cron设置:crontab -u root -l
再例如,root想删除fred的cron设置:crontab -u fred -r
crontab –l –e都是直接操作/var/spool/cron/下当前用户名的文件
crontab命令书写格式:
*代表所有的取值范围内的数字,"/"代表每的意思,"*/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。
* * * * * /bin/sh /scripts/yy.sh
分 时 日 月 周 命令和文件路径
(00-59) (0-23) (1-31) (1-12) (0-6)
* 星号每的意思
- 减号连续一段时间,如:00 17-19 * * * cmd 每天下午17点,18点,19点执行一次命令
, 逗号多个时间段,如:00 10-11,17-19 * * * cmd 每天的上午10,11点整,下午的17,18,19点整执行一次命令
/n n代表数字,指每隔n时间执行一次,如: */2 * * * * cmd 每隔2分钟执行一次命令
举例:
每天早上6点 在根目录下的my_crond文件中追加Good morning.
0 6 * * * echo "Good morning." >> /my_crond //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了
每两个小时
0 */2 * * * echo "Have a break now." >> /my_crond
晚上11点到早上8点之间每两个小时,早上八点 (注意逗号)
0 23-7/2,8 * * * echo "Have a good dream:" >> /my_crond
每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * 1-3 command line
1月1日早上4点
0 4 1 1 * command line
每天的中午12点到下午4点间,每隔2小时执行一次
30 12-16/2 * * * cmd
日和周不能同时用,若要以月为间隔,则日或周必有一个有值
自己写了一个测试
执行crontab -e 命令可进入编辑
下面命令的意思是每周三的早上7点到晚上23点,在40分到50分的时间段里每一分钟都往文件my_crond文件中追加一句hi,Today is Wednesday,(注:my_crond文件会在当前工作目录下被创建)
每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件,此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用crontab -e 来编辑。cron启动后每过一分钟读一次这个文件,检查是否要执行里面的命令。因此此文件修改后不需要重新启动cron服务。
调试定时任务
一个任务不能轻易的直接推上线上服务器,需要在测试服务器上测试好。