不同的 Linux 的发行版内置的计划任务的命令和周期计划任务的命令可能不尽相同,具体需要查看对应的说明文档,或者找一些第三方的程序。
在 红帽企业版中,用户的计划任务可以使用 at 命令, 用户的计划周期任务可以使用 crontab 命令。
计划任务
有时,我们可能需要在未来的某个时间点去执行一个命令或一组命令,那个时间点我们可能并不在电脑跟前,因此我们需要计划任务。计划任务的实现依赖于 atd 这个守护进程。
使用 at TIMESPEC 可以在指定在某个时间点进行作业,会以一种交互式的方式输入要执行的命令, 按 Ctrl + D 会保存退出,如果要执行的命令过多,我们一般会写一个可执行文件存放这些命令,在 at 交互行里去写入 bash /xx/yy.sh 这样的命令。
在 /var/spool/at 目录下,能够看到将要执行的计划任务对应的文件,如果文件被删除,那么对应的计划任务将不会被执行(但不建议直接删除文件)。
使用 atq 或 at -l 命令可以查看。
使用 atrm JOBNUMBER 命令可以删除计划的任务,前提是任务还没被执行。
一些 at 指令的格式
| 时间 | 例子 | 说明 |
|---|---|---|
| Minute | at now + 5min | 任务在五分钟运行 |
| Hour | at now + 1hours | 任务在一个小时后运行 |
| Days | at now + 3days | 任务在三天后运行 |
| Weeks | at now +2weeks | 任务在两周后运行 |
| Fixed | at 10:30pm tomorrow | 任务在明天下午的十点半执行 |
| Fixed | at 8:30am | 任务在当天上午八点半执行,如果做任务时,已经过时间了,则变成明天上午八点半执行 |
| Fixed | at 1:00am 12/20/2021 | 任务在2021年12月20日凌晨(早上)1点执行。 |
周期计划任务
有时我们不仅仅在未来的某个时间点执行指定命令,我们更想周期性的执行指定命令,比如每周的星期四都执行检查磁盘状态的命令。那么就需要周期计划任务。周期计划任务依赖于 crond 守护进程。
使用 crontab 命令可以添加、删除、查看周期计划任务,相比于 at 命令,crontab 命令更加强大。
如果是用户创建周期计划任务,那么会在 /var/spool/con 目录下创建一个以用户名命名的文件,文件里面存放要执行的命令。安装相应格式进行填写,同样如果需要执行的命令过多,建议先写一个可执行文件,然后执行这个可执行文件。
普通用户可以创建自己的周期计划任务, root 参数可以通过 -u 参数给其他用户添加周期计划任务。
| 命令 | 预期用途 |
|---|---|
| crontab -l | 列出当前用户的周期任务 |
| crontab -r | 删除当前用户的所有周期任务 |
| crontab -e | 编辑当前用户的作业 |
每一个作业都包含六个字段,顺序为 min(0-59)、 hour(0-23)、day(1-31)、 month(1-12)、 day of week(0-7 0 和 7 都表示星期天) 、 command。
时间书写格式的要点:
*无关重要/始终- 数字可用于指定分钟数或小时数、日期或工作日
x-y表示范围,从 x 到 y(含)x,y,z表示列表,包含 x,y,z 的时间点。但是列表也可以包含范围,比如 "分钟列"的5,10-13,17表示每小时的5 10 11 12 13 17分钟执行。*/x表示时间间隔 例如 分钟列的*/7表示每七分钟运行一次作业。- 此外,也可以使用三个字母的英文缩写来表示月份或工作日。
Jan、Feb、Tue、 Wed等