在日常工作中,总有一些工作是常规的,固定时段要做的,而每天在固定时间重复做着相同的事,肯定不是一个炫酷的运维者想要的,因此linux的计划任务就上场了——crontab。
定时任务执行一次即停止at
定义:仅仅执行一次任务
命令使用权限管控:/etc/at.deny (写入其中的每一行用户,都不能执行at指令,其他都可以)
关联服务:atd /etc/init.d/atd
命令语法:
at 【-mldv】 TIME
-m不论计划执行成功否,向root发送mail执行完成消息
-l 列出当前用户的at计划任务
-d 删除任务计划
-v 以时间格式列出任务计划表
-c 任务号(查看任务如何执行的脚步)
时间格式说明:
HH:MM
HH:MM YYYY-MM-DD
HH:MM am|pm
HH:MM am|pm +number minutes/hours/days/weeks
示例:
now+5minutes
am+3weeks
# 今晚23点重启主机
$at23:002021-03-01
at>sync&sync
at>shutdown-hnow
ctrl+d结束
# 注
在系统空闲(cpu负载率0.8%)时执行计划任务:(batch命令用法和at一样)
定时任务循环执行
定义:执行循环计划任务
配置文件:/etc/crontab
关联服务:crond
任务记录:/var/spool/cron/*
命令语法:
crontab 【-u username】【-erl】
• -u仅root为其他用户设置任务时使用,其他都是用户本身设置计划任务
• -e开始编辑计划任务
• -r 删除全部计划任务,如需删除单条计划,需到/etc/inittab中删除“nd”
• -l 列出所有计划任务
#如:每周2晚上22点执行清除日志目录
$crontab-e
22* *2/usr/bin/rm-rf/var/log/*
# 命令格式说明
分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(0-6) 命令**
* 任意时刻
, 分隔 eg:3,5,6
- 连续的一段时间
/number 每隔n执行一次
注:周日标识0,周一标识1
注:命令尽量用绝对路径,通过which 命令得到
文件中添加方式:
vim/etc/inittab
命令形式执行方式:
crontab-e
目录执行方式:
# 将多个计划写成脚本放入一个目录eg:mkdir runcron
通过脚本 run-parts联动 执行
* /5 * * * root run-parts /test/runcron
如计划任务未执行就关机了,该怎么办?
anacron可以做到,下次开机后通过检查/var/spool/anacron/*定义的各任务时间戳,没有的将执行
• 配置文件:/etc/anacrontab
• 命令使用:anacron-sfnJob
• -s开始执行,比对时间记录文件(/var/spool/anacron/*),crontab没有执行的就执行,有延迟
• -f不比对直接执行计划
• -n立刻执行,不延迟
• job 为/etc/anacrontab定义的计划名
/etc/anacrontab
1 5cron.daily run-parts /etc/cron.daily
天数 延迟分钟 计划名 脚本 计划任务脚本目录位置
领取专属 10元无门槛券
私享最新 技术干货