定时任务之crontab

一、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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值