第二章
一,调度延迟的用户作业
1,描述延迟的用户任务
(1)核心概念
<1>调度任务:你可以设置任务,让它在未来某个特定时间自动运行。
<2>at 命令:这是一个用来调度任务的工具。比如你可以指定任务在午夜、10分钟后等时间自动执行
<3>atd 守护进程::at命令调度的任务会交给 atd 守护进程来管理,atd 会确保在正确的时间执行任务。
<4>任务队列:atd守护进程维护着多个队列,每个队列用字母(a到z)标记,队列越后,任务的优先级就越低。优先级是通过任务的nice值来决定的,nice值越高,优先级越低。
(2)调度延迟的用户任务
<1>使用 at 命令调度任务:通过 at TIMESPEC 命令,你可以指定某个时间让任务自动执行。TIMESPEC 就是你指定的运行时间。
<2>TIMESPEC 参数需要按照该顺序指定时间和日期。
<3>时间规格
2,检查和管理延迟的用户作业
(1)表格
(2)命令
<1>at -c J0BNUMBER 命令检查在atd守护进程执行作业时运行的命令
此命令显示作业的环境(在用户创建作业时从用户环境设置),以及要运行的命令语法
<2>atrm J0BNUMBER 命令将会删除调度的作业
二.调度周期性用户作业
1,描述周期性用户作业
(1)周期性作业:这些是按计划重复运行的任务,比如每天、每周或每月执行的任务。你可以用它们来自动化一些任务
(2)crond守护进程
<1>crond 是一个系统后台进程,用来管理周期性作业。
<2>crond 默认已启用和启动,确保这些定时任务能按时执行。
(3)配置文件
<1>crond 通过配置文件来了解需要执行哪些周期性作业。这些文件包含了执行任务的时间、命令和执行的频率。
<2>每个用户都有一个个人的配置文件,用于设置个人的周期性任务。
<3>你可以通过运行 crontab-e命令来编辑这个配置文件。
<4>除了每个用户的个人配置文件,系统还会有一组全局配置文件,用来管理系统范围的定时任务(这些通常需要管理员权限)
(4)输出和错误处理:如果调度的作业未编写为使用重定向,则crond守护进程将通过电子邮件将生成的输出或错误发送给作业所有者。
2,调度周期性用户作业
(1)普通用户
使用 crontab 命令管理调度的作业
(2)特权用户
<1>crontab 命令 -u选项来管理其他用户的作业。
<2>crontab 命令是用来管理用户的定时任务的,而不是系统级别的任务。系统级别的周期性任务是由其他机制管理的。
3,描述用户作业格式
(1)编辑
<1>crontab -e命令调用 vim编辑器
<2>在编写周期性作业时,遵循以下建议以获得有效的条目:
* 空行是为了方便阅读
* 以井号(#)开头的行是注释
* 格式为 NAME=value 的环境变量会影响声明位置后的所有行
(2)crontab 文件的格式和设定定时任务
<1>crontab 文件的字段顺序
* 分钟-任务执行的分钟(0到 59)
* 小时-任务执行的小时(0 到 23,24小时制)
* 几号-任务执行的日期(1 到 31)
* 几月-任务执行的月份(1 到 12)
* 星期几-任务执行的星期几(0到6,其中0或7代表星期天)
* 命令-要执行的命令或脚本
<2>crontab 中的设置规则
* (星号):表示该字段的所有可能值,即任务在该时间段内的每一个值都执行例如,*表示每分钟、每小时、每月、每天等。
* 数字:可以直接使用具体的数字来指定任务在某个具体时间执行。
* x-y(范围)用来指定一个范围,包括这个范围的两个端点。例如,5-10表示从:5 到 10 分钟。
* x,y(列表):用逗号分隔多个数值,表示任务会在这些特定值时执行
* */x(间隔):表示任务以某个间隔时间执行。例如,*/7 表示每 7 分钟执行一次任务。
* 月份和星期几的英文缩写:可以使用三字母的英文缩写来表示月份和星期几
三,调度周期性系统作业
1,周期性系统作业
(1)使用系统帐户运行周期性作业
<1>系统管理员通常使用系统帐户来运行周期性作业,而不是普通用户账户。这样可以避免权限问题,并确保作业不会依赖于某个特定的用户登录。
<2>为了管理这些系统作业,最好使用系统范围的crontab 文件,而不是每个用户的 crontab。
(2)/etc/crontab 文件结构
<1>/etc/crontab 文件定义了系统范围的周期性作业,它与用户crontab文件的格式非常相似,但在作业条目之前多了一个字段--指定运行命令的用户。
<2>/etc/crontab 文件的一些设置
* SHELL:设置用于执行命令的 shell,通常是 /bin/bash 。
* PATH:指定环境变量 PATH,影响命令的执行路径。
* MAILTO:设置输出邮件的接收者,默认为root。即系统任务的输出会通过邮件发送给 root 用户。
<3>文件格式说明
命令:最后是要执行的具体命令,前面还会有一个用户字段,指明该命令由哪个用户来执行。
(3)/etc/cron.d目录
<1>自定义 crontab 文件:管理员通常将自定义的 crontab 文件放在 /etc/cron.d/目录中,而不是直接修改/etc/crontab 文件。这是为了避免在系统更新时被覆盖。
<2>软件包自带的 crontab 文件:一些需要周期性任务的软件包,会将自己的crontab文件放入 /etc/cron.d/目录
<3> 系统范围的周期性作业应该放在 /etc/crontab 或 /etc/cron.d/ 目录中,而不是每个用户的个人 crontab。
(4)周期性任务存储库
<1>系统还为周期性任务提供了几个目录来存放特定时间段内需要运行的脚本
/etc/cron.hourly/:每小时运行的脚本,
/etc/cron.daily/:每天运行的脚本。
/etc/cron.weekly/:每周运行的脚本
/etc/cron.monthly/:每月运行的脚本
<2>脚本可执行:存放在这些目录中的文件必须是可执行的,才能被定期执行。如果脚本没有执行权限,需要使用 chmod +x script name 命令给它添加执行权限。
2,使用 Anacron 运行定期命令
run-parts命令和 /etc/anacrontab配置文件的作用是处理系统作业调度,确保即使系统在指定时间内没有运行作业,作业仍会在下次系统运行时执行。
(1)run-parts 命令
<1>功能:run-parts 命令用于执行存放在特定目录中的脚本(比如/etc/cron.daily/、/etc/cron.weekly/等)
<2>用法:它会运行目录下所有的可执行脚本(按字母顺序)
(2)/etc/anacrontab 文件
<1>目的: /etc/anacrontab 文件确保系统作业按计划运行,即使系统在特定时间未启动或被关机、休眠等情况打断,作业仍会在系统恢复后执行。与 crontab 文件不同,anacron 主要用于周期性较长的作业(例如每月、每周),即使系统没有在规定时间内运行,anacron 也会在系统恢复后自动执行未运行的作业。
<2>文件位置: /etc/anacrontab 文件与 crontab 文件类似,但它用于保证即使系统停机,作业也不会错过。
<3>/var/spool/anacron/目录:该目录存储了有关已执行作业的时间戳。crond 守护进程在执行作业时,会更新这些文件的时间戳。通过这些时间戳,可以知道作业上次执行的时间。
(3)/etc/anacrontab 文件的字段
<1>Period in days(周期,单位是天)
* 定义作业的执行间隔
<2>Delayin minutes(延迟时间,单位是分钟)
* 定义crond守护进程在启动作业之前等待的时间。例如,如果设置了延迟,作。业将在系统恢复后延迟一段时间执行,而不是立刻执行
<3>Job identifier(作业标识符)
* 这是作业的唯一标识,用于在日志中记录该作业的执行情况
<4>Command(命令)
* 要执行的命令或脚本。
(4)/etc/anacrontab 文件的环境变量
<1>环境变量:/etc/anacrontab 文件中可以包含一些环境变量
<2>START HOURS RANGE:指定作业执行的时间范围。如果作业在这个时间范围内没有执行,直到下一个时间窗口开始时才会执行
3,systemd定时器
(1)sysstat-collect.timer 定时器单元
作用:sysstat 是一个监控工具,提供系统活动统计信息。sysstatcollect.timer 是一个定时器单元,它会每 10 分钟自动触发收集系统活动数据的服务(sysstat-collect.service)
(2)配置文件内容
<1>配置文件路径:/usr/lib/systemd/system/sysstat-collect.timer
<2>文件内容
* [Unit]部分:提供定时器的描述,告诉我们该定时器每 10 分钟运行一次系统活动统计工具。
* [Timer]部分: 0ncalendar=*:00/10 表示定时器每 10 分钟触发一次。这里的*:00/10 表示“每小时的第 0 分钟开始,10 分钟执行一次”
* [Install]部分:wantedBy=sysstat.service 表示在启动时,与sysstat.service 相关的服务会启动这个定时器。
<3>通过更改 oncalendar 的值来设置更复杂的时间间隔
<4>使用 0nUnitActivesec 选项:这个选项意味着定时器会在上次触发后的 15 分钟后再次触发。也就是,不按照具体时间点,而是基于上次执行的间隔时间来决定下一次执行时间。
<5>关于/usr/lib/systemd/system目录的注意事项
* 不要直接修改 /usr/lib/systemd/system目录下的文件。因为系统更新时,任何修改都可能被覆盖。
* 应该在 /etc/systemd/system目录下创建文件的副本并进行修改。这保证了你的修改不会因为软件包更新而丢失。
<6>修改完定时器配置文件后通过systemctl daemon-reload命令来重新加载 systemd 配置
<7>使用systemctl enable --now<unitname>.timer命令启用定时器并让它立即开始工作
注:--now选项会让定时器立即生效,而不仅仅是启用它
四,管理临时文件
1,临时文件和目录的管理
(1)临时文件和目录的作用
<1>临时文件:很多应用程序和服务会使用临时文件和目录来存储一些不需要长期保存的数据。
- /tmp 目录:用于存放临时数据,系统重启后会清空。
- /run 目录:存放与当前系统运行相关的临时文件,这些文件也通常是易失性的,仅在内存中存在。
<2>自我清理:像 /run 这种目录通常使用内存文件系统,这意味着它们会在系统重启时自动清理(不会保留数据)。
(2)清理临时文件
<1>避免磁盘空间问题:如果不定期清理临时文件,会占用大量磁盘空间
<2>避免陈旧数据:一些临时文件可能包含过时或无用的信息,清理这些文件能避免应用程序或服务使用这些数据时出现问题。
2,systemd-tmpfiles
(1)systemd-tmpfiles 工具
<1>作用:systemd-tmpfiles 是一个管理临时文件和目录的工具。它允许系统管理员设定哪些临时文件和目录应该被创建、删除或保护。
<2>功能:这个工具的作用是在系统启动时清理或创建所需的临时文件。它通过读取配置文件来执行操作
(2)systemd 启动过程中的工作
<1>在系统启动时,首先启动的 systemd 服务之一是 systemd-tmpfiles-setup 服务
<2>该服务会运行systemd-tmpfiles命令,使用--create和--remove 选项。这意味着它会根据配置文件中的指示来创建或删除临时文件和目录
(3)配置文件
<1>systemd-tmpfiles 使用以下几个地方的配置文件
/usr/lib/tmpfiles.d/*.conf
/run/tmpfiles.d/*.conf
/etc/tmpfiles.d/*.conf
<2>这些配置文件包含指令,告诉systemd-tmpfiles 应该如何管理临时文件。
3,使用 Systemd 定时器清理临时文件
(1)定时器清理临时文件
<1>systemd-tmpfiles-clean.timer是个systemd临时文件的任务。
<2>触发的清理任务是 systemd-tmpfiles-clean.service 服务,这个服务会执行systemd.tmpfiles --clean命令来清理临时文件,
(2)查看定时器单元配置
<1>cat systemd-tmpfiles-clean.timer
<2>输出的内容会告诉你该定时器的具体位设置和触发条件。
(3)定时器配置文件中的参数解释
在配置文件中,[Timer]部分指定了如何触发服systemd-tmpfiles-clean.timer服务
<1>0nBootSec=15min:这个参数表示系统启动后15分钟,systemd-tmpfiles-clean.service 服务会被触发。
<2>0nunitActivesec=1d :这个参数表示,服务上一次激活后 24 小时,系统会再次触发清理服务。
(4)修改定时器配置文件后,使用systemctl daemon-reload命令让 systemd重新加载配置文件,以确保更改生效:
4,手动清理临时文件
(1)systemd-tmpfiles --clean 命令作用
该命令会根据配置文件清理临时文件。它不会创建文件或目录,而是会清除那些 超过设定时间 未被访问、修改或更改的文件。
(2)配置文件格式
systemd-tmpfiles 的配置文件是按照一定格式写的,每行包含七个字段
路径:表示文件或目录的位置。
模式:表示文件的权限设置(例如,0755)
UID:文件所有者的用户ID
GID:文件所属组的组ID。
期限:定义文件或目录被清除的时限(例如,1d 表示1天)参数:额外的配置信息,控制 systemd-tmpfiles 的行为。.
类型:表示要执行的操作,比如:
d:创建目录。
2:恢复 SELinux 上下文、↓权限和所有权。
(3)示例
5,配置文件优先级
(1)配置文件存放位置
<1>/etc/tmpfiles.d/*.conf
* 这是最高优先级的目录,用于 自定义配置。如果你想修改系统的临时文件管理设置,应该在这个目录下放置配置文件,或者修改这个目录下的文件
* 这个目录中的配置文件会 覆盖 其他目录的同名配置文件
<2>/run/tmpfiles.d/*.conf
* 这个目录中的文件是 临时性的,通常由正在运行的守护进程使用来管理自己的临时文件
* 文件在系统重启后会消失,因此这些配置一般用于临时的、运行时的设置
* 如果 /run/tmpfiles.d/和 /usr/lib/tmpfiles.d/目录下有同名文件,/run/tmpfiles.d/下的文件会被优先使用。
<3>/usr/lib/tmpfiles.d/*.conf
* 这是系统默认的配置文件位置,软件包安装时会将文件放在这个目录下。不要直接编辑这个目录下的文件,因为它们会随着软件包更新而被覆盖
(2)优先级
/etc/tmpfiles.d/(最高优先级)
/run/tmpfiles.d/
/usr/lib/tmpfiles.d/(最低优先级)
(3)如何使用配置文件
<1>如果你想覆盖软件包提供的默认设置,应该将配置文件复制到/etc/tmpfiles.d/目录下,然后进行编辑
<2>这样做的好处是,即使软件包更新,你的配置不会被覆盖,因为/etc/tmpfiles.d/中的配置具有更高的优先级