crontab
介绍:
用户定时任务(多用户-- 意味着每个用户的定时设置都是单独的)
crontab指令常见于Unix和类Unix的操作系统之中,用于设置周期性被履行的指令 ; 该指令从规范输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和履行; cron服务提供crontab命令来设定定时任务的
cron
- cron服务位于/etc/init.d/cron
- cron服务提供crontab命令来设定cron服务的
启动服务
systemctl status cron
systemctl start cron
systemctl enable cron
关闭服务
systemctl status cron
systemctl stop cron
systemctl disable cron
crontab
- crontab命令位于/usr/bin/crontab
- crontab命令设置定时任务由cron服务定时检查执行
语法:
cron
时间参数
域 | 允许的数值 | 允许的特殊字符 | 备注 |
---|---|---|---|
秒 | 0~59 | - * / | - |
分 | 0~59 | - * / | - |
小时 | 0~23 | - * / | - |
日期 | 1~31 | - * ? / L W C | - |
月份 | 1~12 | JAN-DEC - * / | - |
星期 | 1~7 | SUN-SAT - * ? / L C # | 1 表示星期天,2 表示星期一,依次类推 |
年(可选) | 留空,1970~2099 | , - * / | 自动生成,工具不显示该值 |
特殊字符
字符 | 含义 | 示例 |
---|---|---|
* | 表示匹配域的任意值 | 在分这个域使用 * ,即表示每分钟都会触发事件。 |
? | 表示匹配域的任意值,但只能用在日期和星期两个域,因为这两个域会相互影响。 | 要在每月的 20 号触发调度,不管每个月的 20 号是星期几,则只能使用如下写法:13 13 15 20 * ? 。其中,因为日期域已经指定了 20 号,最后一位星期域只能用 ? ,不能使用 * 。如果最后一位使用 * ,则表示不管星期几都会触发,与日期域的 20 号相斥,此时表达式不正确。 |
- | 表示起止范围 | 在分这个域使用 5-20,表示从 5 分到 20 分钟每分钟触发一次。 |
/ | 表示起始时间开始触发,然后每隔固定时间触发一次 | 在分这个域使用 5/20,表示在第 5 分钟触发一次,之后每 20 分钟触发一次,即 5、 25、45 等分别触发一次。 |
, | 表示列出枚举值 | 在分这个域使用 5,20,则意味着在 5 和 20 分每分钟触发一次。 |
L | 表示最后,只能出现在日和星期两个域 | 在星期这个域使用 5L,意味着在最后的一个星期四触发。 |
W | 表示有效工作日(周一到周五),只能出现在日这个域,系统将在离指定日期最近的有效工作日触发事件。 | 在日这个域使用 5W,如果 5 号是星期六,则将在最近的工作日星期五,即 4 号触发。如果 5 号是星期天,则在 6 号(周一)触发;如果 5 号为工作日,则就在 5 号触发。另外,W 的最近寻找不会跨过月份。 |
LW | 这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五。 | |
# | 表示每个月第几个星期几,只能出现在星期这个域 | 在星期这个域使用 4#2,表示某月的第二个星期三,4 表示星期三,2 表示第二个。 |
特殊标识符
string | meaning |
---|---|
@reboot | Run once, at startup. |
@yearly | Run once a year, 0 0 1 1 * . |
@annually | (same as @yearly) |
@monthly | Run once a month, 0 0 1 * * . |
@weekly | Run once a week, 0 0 * * 0 . |
@daily | Run once a day, 0 0 * * * . |
@midnight | (same as @daily) |
@hourly | Run once an hour, 0 * * * * . |
crontab命令
crontab [ -u user ] [ -i ] { -e | -l | -r }
crontab定时任务设置
*/* */* */* */* */* command
分 时 日 月 周几
参数:
- -e 编辑某个用户的cron服务
- -l 列出某个用户cron服务的详细内容
- -r 删除某个用户的cron服务
- -i 在删除之前提示
- -u 设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
实例:
crontab -l
crontab -e
crontab -u tian -l
crontab -u tian -e
# 添加自定义的crontab文件
crontab self_crontab
crontab -r
扩展
- 每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件,此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用crontab -e 来编辑。
- cron启动后每过一份钟读一次这个文件,检查是否要执行里面的命令,因此修改配置后不需要重启cron服务。
- cron的系统级配置文件位于/etc/crontab
- cron服务的日志:
/var/log/syslog
, 方便定位错误 - crontab设置的定时任务命令依赖环境变量,最好就带全命令路径
参考
https://www.cnblogs.com/GarrettWale/p/16256688.html
https://www.cnblogs.com/itech/archive/2011/02/09/1950226.html
https://www.bilibili.com/video/BV1Di4y1x77n/?spm_id_from=333.337.search-card.all.click&vd_source=977c17f5af97388edfe1ecf540089884