在日常工作中,总有一些工作是常规的,固定时段要做的,而每天在固定时间重复做着相同的事,肯定不是一个炫酷的运维者想要的,因此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 +5 minutes

am +3weeks

# 今晚23点重启主机
$at 23:00 2021-03-01
at>sync&sync
at>shutdown -h now
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
0 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 -sfn Job

•        -s 开始执行,比对时间记录文件(/var/spool/anacron/*),crontab没有执行的就执行,有延迟

•        -f 不比对直接执行计划

•        -n 立刻执行,不延迟      

•       job 为/etc/anacrontab定义的计划名

/etc/anacrontab

1  5 cron.daily run-parts /etc/cron.daily

天数 延迟分钟 计划名   脚本   计划任务脚本目录位置