安装
sudo apt install cron
格式
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
字段含义:
cron表达式(不包括用户名和命令)采用5段式,* * * * *
分别是m h dom mon dow
m:分钟(0-59)
h:小时(0-23)
dom:日,一个月中的第几日(0-31)
mon:月份(1-12)
dow:星期,一周中的第几日(0-6,1为周一,周日可用0或7表示)
每个字段的特殊符号:
(*):每,每秒、每分、每天、每月。
(?):只会出现在dom和dow两个字段,表示这个位置的值不确定。由于指定日期(Day of Month)和指定星期(Day of Week)存在冲突,所以当指定了日期(Day of Month)后(包括每天*),星期(Day of Week)必须使用问号(?),同理,指定星期(Day of Week)后,日期(Day of Month)必须使用问号(?)
(-):表达一个范围,如在小时字段中使用“10-12”,表示从 10~12 点,即 10、11、12。
(,):表达一个列表值,如在星期字段中使用“1,2,4”,表示周一、周二、周四。
(/):如 x/y,x 是开始值,y 是步长,比如在秒字段使用“0/15”,表示从 0 秒开始,每 15 秒,最后就是 0、15、30、45、60,另 */y,等同于 0/y。
另,(-)(,)(/)可以组合使用,如分钟字段“1-40/3,38”,表示从1分开始到40分每隔3分钟,且另加上38分。
另,并非所有cron支持(?),故一般都使用(*)即可。
cron表达式测试连接:
https://crontab.guru/
编辑方法
方法一:
crontab -e
此方法会打开文本编辑器,编辑当前用户的crontab定时任务列表。可以用crontab -l
查看当前用户的定时任务,用crontab -r
移除当前任务的定时任务。
此法的表达式格式为* * * * * command
,即cron表达式后跟着命令。
此法生成的文件为/var/spool/cron/crontabs/{user}
其中{user}为当前用户名。
方法二:
编辑文件/etc/crontab
,此法为系统级别,需要加上执行命令的用户,表达式格式为* * * * * user command
,即cron表达式后跟上用户名和命令。
例子
添加每周日23:59重启的任务
echo '59 23 * * 7 root reboot' >> /etc/crontab
删除重启定时任务
sed -i '/reboot/d' /etc/crontab