一、crontab
crontab是linux中用于自定义设置定时任务的命令。
语法:crontab [-u <用户名称>][配置文件] 或 crontab [-u <用户名称>][-elr]
参数说明:
-e 编辑crontab定时任务列表
-l 查看crontab定时任务列表。
-r 删除crontab定时任务。
-u<用户名称> 指定要设定计时器的用户名称。
Linux下的任务调度分为两类,系统任务调度和用户任务调度。
系统任务调度:系统周期性要执行的工作,比如写缓存数据到硬盘、日志清理等。
配置文件:/etc/crontab
用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。
配置文件:
其一:/var/spool/cron/
该目录下存放的是每个用户(包括root)的crontab任务,文件名以用户名命名
其二:/etc/cron.d/
这个目录用来存放任何要执行的crontab文件或脚本。
二、开启服务
cron 是linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
查看crontab服务状态:service crond status
手动启动crontab服务:service crond start
查看crontab服务是否已设置为开机启动,执行命令:ntsysv
加入开机自动启动:chkconfig --level 35 crond on
三、格式说明
* * * * * command
- - - - - -
| | | | | +-----要执行的命令
| | | | +----- 周 (0 - 7) (星期天 为0或7) 或sun,mon,tue,wed,thu,fri,sat
| | | +---------- 月 (1 - 12) 或jan,feb,mar,apr ...
| | +--------------- 日 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
crontab每次检查间隔是1分钟,所以如果5个都是 ‘*’,表示每分钟都执行一次。
写法总结:
- 所有时间点:直接用*
- 多个时间点:直接把时间点用逗号隔开,比如15分和30分执行,那就把第一个*用 15,30 替代。
- 指定时间区间:起始时间和终止时间用短横线连接,比如3-5
- 指定时间间隔:用/n,例如*/2代表全时间段每2个单位时间执行;2-8/2代表2-8这个时间区间每2个单位时间执行一次。
四、crontab命令举例
# 每天早上6点
0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。
# 每两个小时
0 */2 * * * echo "Have a break now." >> /tmp/test.txt
# 晚上11点到早上8点之间每两个小时和早上八点
0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt
# 每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * 1-3 command line
# 1月1日早上4点
0 4 1 1 * command line SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号 HOME=/
# 每小时(第一分钟)执行/etc/cron.hourly内的脚本
01 * * * * root run-parts /etc/cron.hourly
# 每天(凌晨4:02)执行/etc/cron.daily内的脚本
02 4 * * * root run-parts /etc/cron.daily
# 每星期(周日凌晨4:22)执行/etc/cron.weekly内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly
# 每月(1号凌晨4:42)去执行/etc/cron.monthly内的脚本
42 4 1 * * root run-parts /etc/cron.monthly
# 注意: "run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名。
# 每天的下午4点、5点、6点的5 min、15 min、25 min、35 min、45 min、55 min时执行命令。
5,15,25,35,45,55 16,17,18 * * * command
# 每周一,三,五的下午3:00系统进入维护状态,重新启动系统。
00 15 * *1,3,5 shutdown -r +5
# 每小时的10分,40分执行用户目录下的innd/bbslin这个指令:
10,40 * * * * innd/bbslink
# 每小时的1分执行用户目录下的bin/account这个指令:
1 * * * * bin/account
# 每天早晨三点二十分执行用户目录下如下所示的两个指令(每个指令以;分隔):
203 * * * (/bin/rm -f expire.ls logins.bad;bin/expire$#@62;expire.1st)
参考文章:https://www.liuzhishi.com/3511.html
https://www.jianshu.com/p/838db0269fd0
https://blog.csdn.net/toopoo/article/details/104981236
https://www.likecs.com/show-306958474.html