第一章 Linux的例行性工作(计划任务)
生活中,我们有太多场景需要使用到闹钟,比如早上 7 点起床,下午 4 点开会,晚上 8 点购物,等等。在 Linux 系统里,我们同样也有类似的需求。比如我们想在凌晨 1 点将文件上传服务器,或者在晚上 10 点确认系统状态,等等。但我们不可能一直守在电脑前,毕竟我们也需要下班/睡觉,还要陪女朋友(new一个也行)。而且即使在 上班期间,如果到点了还需要人工操作,未免效率太低了。at 命令就是为这
1. 场景:
生活中,我们有太多场景需要使用到闹钟,比如早上 7 点起床,下午 4 点开会,晚上 8 点购物,等等。
在 Linux 系统里,我们同样也有类似的需求。比如我们想在凌晨 1 点将文件上传服务器,或者在晚上 10 点确认系统状态,等等。
但我们不可能一直守在电脑前,毕竟我们也需要下班/睡觉,还要陪女朋友(new一个也行)。而且即使在 上班期间,如果到点了还需要人工操作,未免效率太低了。
at 命令就是为这个需求而诞生的。使用 at 命令,你可以在特定时间自动完成你所设定的任务,也可以 实现自动化,非常方便快捷!
2. 单一执行的例行性任务--at(一次性)
2.1. 安装
at命令需要安装
[root@server ~]# yum install at -y
[root@server ~]# at -V # 大写V
at version 3.2.2
启动服务
[root@server ~]# systemctl start atd
[root@server ~]# systemctl enable --now atd # 设置开机启动
[root@server ~]# systemctl status atd # 查看状态
2.2. at命令详解
2.2.1. 格式
at -参数 日期时间
2.2.2. 参数
-m:当任务完成后,即使没有标准输出,也会给用户发送邮件
-l:列出系统上所有用户的at任务,等价于atq
-d:删除或取消一个任务
-v:使用时间格式,列出at任务
-c:可以列出任务之后的命令内容
-f:从文件中
2.2.3. 时间格式
| 参数 | 说明 |
| HH:MM | 在今天HH小时的MM分钟执行,若时间点错过,将在明天执行 |
| HH:MM YYYY-MM-DD | 规定在某年某月的某一天的特殊时刻执行该工作 |
| now +2 minutes | 从现在开始的minutes、hours、days、weeks执行 |
2.2.4. 实验1
延迟执行ls /root ,并将结果写入到at.txt中
[root@server ~]# at 14:17
warning: commands will be executed using /bin/sh
at> ls /root > at.txt
at> <EOT>
# 点击ctrl+d 结束交互性界面
[root@server ~]# at -l # 查看已存在的计划任务
3
3
Thu May 25 14:17:00 2023 a root
[root@server ~]# atq
# 同上
Thu May 25 14:17:00 2023 a root
2.2.5. 实验2
不使用交互性命令实现,通过管道符命令执行
[root@server ~]# echo "echo 'hello again' >> at.txt" | at now +1 minute
2.2.6. 注意
at命令只要指定的时间正确,就可以执行对应的命令
at命令的输出结果不会显示到屏幕上
at命令中执行的命令最好使用绝对路径,不容易报错
过程:输入at 时间 -> 回车 ->输入执行的命令->ctrl+d退出at
at命令只会执行一次
2.2.7. at命令执行过程分析
第一步:寻找/etc/at.allow (白名单)是否存在,写在该文件中用户才可执行at命令
第二步:若/etc/at.allow不存在,则寻找/etc/at.deny(黑名单)文件,写在该文件中的用户不能使用at命令
第三步:若两个文件都不存在则只有root用户可以使用at命令
注意:若拒绝某用户使用at命令则可以将用户名写入到/etc/at.deny中
3. 循环执行的例行性任务--crontab(周期性)
3.1. crontd服务
at 命令是在指定的时间只能执行一次任务, crontab 命令可以循环重复的执行定时任务,与Windows 中 的计划任务有些类似
crond 是 Linux 下用来周期地执行某种任务或等待处理某些事件的一个守护进程,在安装完成操作系统 后,默认会安装 crond 服务工具,且 crond 服务默认就是自启动的,若需要安装则执行如下命令:
[root@server ~]# yum install crontabs # 安装,注意包名
[root@server ~]# systemctl status crond # 查看状态
crond 进程 每分钟会定期检查是否有要执行的任务,如果有,则会自动执行该任务,crontab 命令需要 crond 服务支持
linux 任务调度的工作主要分为以下两类:
系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
个人执行的工作:某个用户定期要做的工作,例如每隔 10 分钟检查邮件服务器是否有新信,这些工 作可由每个用户自行设置
3.2. crontab工作过程
当系统中有 /etc/cron.allow 文件时,只有写入此文件的用户可以使用 crontab 命令,没有写入的用户不 能使用 crontab 命令。同样,如果有此文件,/etc/cron.deny 文件会被忽略,因为 /etc/cron.allow 文 件的优先级更高
当系统中只有 /etc/cron.deny 文件时,写入此文件的用户不能使用 crontab 命令,没有写入文件的用户 可以使用 crontab 命令
crontab 执行的每一项工作都会被 记录到 /var/log/cron 这个日志文件中 当用户使用 crontab 新建工作之后,该项工作就会被记录到 /var/spool/cron/目录里面
3.3. crontab命令详解
3.3.1. 格式
crontab [-u user] [-l| -r | -e]
3.3.2. 参数
| 参数 | 解释 | 示例 |
| -l | list 查看定时任务 | crontab -l |
| -e | edit 编辑定时任务,建议手动编辑 | crontab -e |
| -i | 删除定时任务,提示用户确认删除,避免出错 | crontab -i |
| -r | 删除定时任务,移除/var/spool/cron/username文件 | crontab -r |
| -u user | 指定用户执行任务,root 可以管理普通用户计划任务 | crontab -u redhat -l |
3.3.3. 编辑crontab
格式:
[root@server ~]# crontab -e
写入的命令格式:每一行书写一个工作,每个工作共有6个字段
| 代表意义 | 分钟 | 小时 | 日期 | 月份 | 星期 | 命令 |
| 数字范围 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7(0和7表示周日) | 执行的动作 |
*/5 6-8 * 8 1 /bin/bash /test.sh
3.3.4. 特殊字符
| 特殊字符 | 含义 |
| * | 任意时刻 |
| - | 表示时间范围 |
| ,(逗号) | 分割时段 |
| */数字 | 指定时间间隔的频率,如:每3分钟执行一次,*/3 |
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)