计划将来的任务(Linux)

一、内容概要

        1 . 设置将在某个时刻运行一次的命令。

        2 . 利用 crontab,为用户设置重复运行的计划任务。

        3 . 在系统 crontab 文件和目录中,设置命令重复运行的计划任务。

        4 . 启用和禁用 systemd timer(定时器),并配置管理临时文件的定时器。

二、文章内容

1.描述延迟的用户任务

        ① 计划好运行的命令被称为任务或作业(task or job)

        ② at 软件包包含 atd 守护进程,和一组命令(at、atq 等)。在默认的

        ③ RHEL 安装过程中,将自动安装并启用 atd 守护进程

        ④ root 及普通用户可以使用 at 命令创建计划任务,atd 守护进程提 供 a-z

        ⑤ 共26个队列,按字母排序,越后面的队列优先级越低

(1)计划延迟的用户任务

        ①使用 at TIMESPEC 创建作业,at 从 stdin 中读取指令,直至 Ctrl+D 终止。

        也支持从脚本中导入指令,例如:

at now +5min < myscript

        ②TIMESPEC 非常灵活,可以参考:/usr/share/doc/at/timespec

        例:

- now +5min 
- teatime tomorrow(下午 16:00) 
- noon +4 days 
- 5pm august 3 2021
(2)使用 atq 或 at -l 命令查看用户的待处理作业

        ①. 该作业的唯一编号;

        ②. 计划作业的执行日期和时间;

        ③. 表示作业已排入默认队列 a,不同的作业可以排入不同的队列中;

        ④. 作业所有者

        注:普通用户只能查看和控制自己的作业。root 用户可以查看和管理所有作业

at -c JOBNUMBER         可以查看作业的详细信息
atrm JOBNUMBER         删除计划作业
(3)示例

        ①显示当前时间

date

        ②创建新的计划延时任务

        将字符串 "'Hello world' > myjob.txt" 通过管道传递给 at 命令,并指定在当前时间的 3 分钟后执行。

echo 'echo "Hello world!" >> myjobs.txt' | at now + 3 minutes

         ③使用 atq 或 at -l 命令查看用户的待处理作业

Atq
at -l

         等待三分钟,查看myjobs.txt文件内容

cat myjobs.txt

2.周期性用户作业

(1)描述周期性用户作业

                ①按计划重复运行的作业被称为周期性作业

                ② crond 守护进程管理周期性作业,由 cronie 软件包提供,默认安装并启动

                ③crond 守护进程读取多个配置文件,crontab 命令编辑配置文件

                ④如果计划任务运行失败,crond 会发送邮件给指定用户

(2)计划周期性用户作业

命令

用途

crontab -l

列出当前用户的计划作业

crontab -l

删除当前用户的所有作业

crontab -e

编辑当前用户的作业

crontab filename

删除所有作业,并替换为filename 读取的作业。如果没有指定文件,则使用 stdin

        注意:crontab 命令使用 -u 选项,以此来管理其他用户的作业。 不推荐crontab 命令来管理系统作业,而应使用下一节中介绍的方法

(3)描述用户作业格式

        crontab -e 调用 vim 进行计划任务的编辑,每行一个作业,支持空行和 # 注释行

        crontab 的字段格式是:分钟 小时 日 月 星期 命令,其中日和星期是或的关系

        前五个字段全部使用相同的语法规则:

                - * 表示始终

                - 数字可用于指定分钟数或小时数、日期或者工作日

                - x-y 表示范围,x 到 y(含)

                - x,y 表示列表,列表也可以包含范围

                - */x 表示 x 的时间间隔

(4)示例:创建周期性用户作业

        ①显示当前时间

date

         ②创建周期性用户作业

crontab -e

 

*/2 * * * * echo "this is a test! $(date)" >> testjob.txt

         退出编译

 

         ③检查周期性用户作业

                使用crontab -1命令列出计划的周期性作业。检查上一步中计划作为周期性作业运行的命令。

crontab -l

        ④检查结果

                等待几分钟后,用cat testjob.txt命令查看周期性用户作业的结果。

     

        ⑤删除计划以student用户身份运行的所有周期性作业。

                使用crontab -r命令删除用户计划的所有周期性作业。

crontab -r

                使用crontab -l验证是否删除周期性作业

crontab -l

3.周期性系统作业

(1)描述周期性系统作业

        - 系统范围的 crontab 文件与用户的 crontab 类似,不同之处在于系统范围的 crontab 文件的命令字段前有一个额外的用户字段。

        - 周期性系统作业应该在 /etc/cron.d 目录下创建自定义 crontab 文件。

        - crontab 系统中还包含每小时、每天、每周和每月运行的脚本目录。这些目录中包含可执行的 shell 脚本,分别对应/etc/cron.hourly/、/etc/cron.daily/、/etc/cron.weekly/、/etc/cron.monthly/ 目录。

        - /etc/cron.d/0hourly 文件调用 run-parts 命令运行 /etc/cron.hourly/* 脚本。

        - /etc/anacrontab 文件调用 run-parts 命令运行每日、每周和每月的作业。

        - /etc/anacrontab 确保重要的作业始终运行,不会因为系统关闭或休眠而意外跳过。例如,如果由于系统重启而导致某个每日运行的系统作业上次未按时执行,则在系统启动后就会执行此作业。

(2)SYSTEMD timer 简介

        随着 systemd,RHEL7 开始启用了新的调度功能:systemd timer unit

        systemd timer unit 激活另一个 unit,一般是与 timer unit 同名的 service

unit

(3)timer unit 举例

        sysstat 软件包含有:sysstat-collect.timer,每隔10分钟收集系统统计信息,参考:/usr/lib/systemd/system/sysstat- collect.timer

        OnCalendar 定义了时间间隔,表示方法很灵活,例如:2019-03-*12:35,37,39:16 表示 2019 年 3 月每一天的 12:35:16、12:37:16 和12:39:16

        也可使用 OnUnitActiveSec,例如:OnUnitActiveSec=15min 表示每隔15分钟激活

        注意:不要修改 /usr/lib/systemd/system 中配置文件,应该拷贝到 /etc/systemd/system 中并修改,以防因为软件包的更新被覆盖

         更改 systemd 配置后,使用 systemctl daemon-reload 让 systemd 重新 加载配置。重新加载后,需要使用 systemctl 激活 timer unit

 4.管理临时文件

(1)管理临时文件

        有些应用(和用户)会使用 /tmp 目录来保存临时数据 还有一些应用(和用户)则使用特定位置,如 /run 下特定易失性目录

        系统重新启动或断电时,易失性存储器的所有内容都会丢失,为保持系统充分运行,有必要创建这些不存在的目录和文件,因为守护进程和脚本可能会依靠它们的存在

        RHEL7 及更高版本中包含了一个名为 systemd-tmpfiles 的新工具,它提供了一种结构化和可配置的方法来管理临时目录和文件在 systemd 启动系统后,其中一个最先启动的 service unit 是 systemd-tmpfiles-setup,该服务运行 systemd-tmpfiles -- create --remove 命令

        此命令从 /usr/lib/tmpfiles.d/*.conf、/run/tmpfiles.d/*.conf 和 /etc/tmpfiles.d/*.conf 读取配置文件。系统会删除这些配置文件中标记要删除的文件和目录,并且会创建标记要创建(或修复权限)的文件和目录,并使其拥有正确的权限(如有必要)

(2)使用 Systemd timer 清理临时文件

        名为 systemd-tmpfiles-clean.timer 的 systemd timer unit 会定期触发systemd-tmpfiles-clean.service 来执行 systemd-tmpfiles --clean命令

​​​​​​​(3)手动清理临时文件

        tmpfiles.d man page 介绍了 systemd-tmpfiles 的配置文件格式基本语法由七列构成:“类型”、“路径”、“模式”、“UID”、“GID”、 “期限”和“参数”

         类型指的是 systemd-tmpfiles 应执行的操作

d 表示创建不存在的目录;Z 表示以递归方式恢复 SELinux context 及权限;D 表示如果目录不存在则创建该目录,如果存在则清除所有内容

        运行 systemd-tmpfiles --clean时,删除超过一天时间内尚未被访问、更改或修改的所有文件​​​​​​​

(4)配置文件的优先级

        配置文件可位于三个位置:

                - /etc/tmpfiles.d/*.conf 管理员自定义配置文件,优先级最高

                - /run/tmpfiles.d/*.conf 内存中,由守护进程自己管理,优先级次之

                - /usr/lib/tmpfiles.d/*.conf rpm 软件包提供,不要编辑,优先级最低

四、总结

        •计划在将来运行一次的作业称为延迟作业或任务。

        • 周期性用户作业可按重复的计划执行用户任务。

        • 周期性系统作业则是按重复的计划完成影响整个系统的管埋任务。

        • systemd 定时器单元既可以执行延迟作业,也可以执行周期性作业。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值