crontab定时任务

anonymous_vhacker
anonymous_vhacker
发布于 2023-01-10 / 30 阅读
0
0

crontab定时任务

安装

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

评论