Linux计划任务分为两类:
1、单次按计划执行,然后终止(at)
2、例行按计划执行,每隔一定周期循环执行(crontab)
单次执行计划任务 at
at 命令的作用是在一个指定的时间执行1个指定任务,只执行1次,且需开启 atd 进程。
代码语言:shell复制# 启动 atd 服务
systemctl start atd
命令格式:
代码语言:shell复制at [参数] 时间格式
# 参数
-m:当指定的任务完成后,将给用户发送邮件,即便没有输出信息
-v:显示任务计划执行的时间
-c:列出任务的实际命令内容
# 时间格式
# 在今天的HH:MM时执行,若时间已过则明天执行
HH:MM
# 在某年某月某日某时某分执行
HH:MM YYYY-MM-DD
# 在某个时间点再加多少时间后执行
HH:MM number [minutes][hours][days][weeks]
命令示例:
代码语言:shell复制# 当前时间再加2分钟后执行
at now 2 minutes
# 可能返回以下内容
warning: commands will be executed using /bin/sh
at Thu Dec 7 18:15:00 2023
# 在 at> 后输入要执行的内容
at> echo hello>/home/1.txt
# 可以输入多条要执行的内容
at> echo hello>/home/2.txt
# 按 ctrl d 结束输入,会自动产生代码<EOT>
at> <EOT>
也可以指定时间执行
代码语言:shell复制# 指定日期时间执行
at 18:31 2023-12-07
# 指定时间执行,若时间已过则明天执行
at 18:32
创建完成后通过以下命令进行查询、删除、查看内容等操作
代码语言:shell复制# 查询目前系统中所有的 at 计划
atq
# 可能返回如下内容,其中数字9就是at计划的编号
9 Thu Dec 7 18:27:00 2023 a root
# 查看计划的内容
at -c 9
# 删除任务
atrm 9
循环执行计划任务 crontab
循环执行计划任务是由 cron(crond)这个系统服务来控制的,该服务默认启动,用户控制计划任务的命令是 crontab
crontab -e 是针对用户来设计的,如要设计系统的计划任务,则需编辑 /etc/crontab cron 服务最低检测限制是【分钟】
命令格式:
代码语言:shell复制crontab 选项
# 选项
-e:编辑该用户的计划任务设置
-l:列出该用户的计划任务设置
-r:删除该用户的计划任务设置
编辑 crontab
代码语言:shell复制# 编辑计划任务
crontab -e
# 输入【时间格式】及【要执行的命令】
时间格式 要执行的命令
# 以上内容可以输入多条,全部编辑完成后保存退出
crontab 写法说明
代码语言:shell复制# 时间顺序:分 时 日 月 周
minute hour day month week command
# minute: 表示分钟,可以是从0到59之间的任何整数
# hour:表示小时,可以是从0到23之间的任何整数
# day:表示日期,可以是从1到31之间的任何整数
# month:表示月份,可以是从1到12之间的任何整数
# week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日
# command:要执行的命令,可以是系统命令,也可以是脚本文件(必须为绝对路径)
在以上各个字段中,还可以使用以下特殊字符:
星号(*):代表所有可能的值,在满足其它字段的制约条件后执行
逗号(,):逗号隔开的值指定列表范围,例如“1,2,5,7,8,9”
中杠(-):整数之间的中杠表示整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):正斜线指定时间的间隔频率,可以和星号一起使用,例如*/10,如用在minute表示每10分钟执行1次
# 时间格式
* * * * *
- - - - -
| | | | |
| | | | ----- 星期中星期几 (0 - 6) (星期天 为0)
| | | ---------- 月份 (1 - 12)
| | --------------- 一个月中的第几天 (1 - 31)
| -------------------- 小时 (0 - 23)
------------------------- 分钟 (0 - 59)
crontab 写法示例:
代码语言:shell复制# 每分钟执行1次command
* * * * * command
# 每小时执行1次command
0 * * * * command
# 每天执行1次command
0 0 * * * command
# 每周执行1次command
0 0 * * 0 command
# 每月执行1次command
0 0 1 * * command
# 每月最后1天执行1次command
0 0 L * * command
# 每年1月1日执行1次command
0 0 1 1 * command
# 每2小时执行1次command
0 */2 * * * command
# 每天7:50执行1次command
50 7 * * * command
# 每月1号和15号执行1次command
0 0 1,15 * * command
# 每小时的第1分执行1次command
1 * * * * command
# 每小时的第3和第15分钟执行1次command
3,15 * * * * command
# 在上午8点到11点的第3和第15分钟执行1次command
3,15 8-11 * * * command
# 每隔2天的上午8点到11点的第3和第15分钟执行1次command
3,15 8-11 */2 * * command
# 每月1、10、22日的4 : 45执行1次command
45 4 1,10,22 * * command
# 每周六、周日的1:10执行1次command
10 1 * * 6,0 command
# 每天18 : 00至23 : 00之间每隔30分钟执行1次command
0,30 18-23 * * * command
代码语言:shell复制当程序指定的时间执行后,系统会发一封邮件给当前的用户,显示该程序执行的内容,若不希望收到这样的邮件,在每行后空格之后加上 > /dev/null 2>&1 即可,如:
1 * * * * command > /dev/null 2>&1
crontab 命令的其它示例
代码语言:shell复制# 列出该用户的计划任务设置
crontab -r
# 删除该用户的计划任务设置
crontab -l
我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!