《鸟哥的Linux私房菜 基础学习篇(第四版)》 第15章 例行性工作排程 笔记
2018-05-09 17:57 受匕图灵 阅读(215) 评论(0) 编辑 收藏 举报第三版的15章在第四版pdf上看,之后都在第四版pdf上看。第四版和第三版章节号不一样,从此日开始以第四版记录笔记
两种工作排程的方式:
一种是突发性的。
at :at 是个可以处理仅执行一次就结束排程的指令,不过要执行 at 时, 必须要有 atd 这个服务 (第十七章) 的支援才行。在某些新版的 distributions 中, atd 可能预设并没有启动,那么 at 这个指令就会失效呢!不过我们的 CentOS 预设是启动的!
一种是例行性的,就是每隔一定的周期要来办的事项。
crontab :crontab 这个指令所设定的工作将会循环的一直进行下去! 可循环的时间为分钟、小时、每周、每月或每年等。crontab 除了可以使用指令执行外,亦可编辑 /etc/crontab 来支持。 至于让 crontab 可以生效的服务则是 crond 这个服务喔!
Linux 系统常见的例行性任务有:
进行登录档的轮替 (log rotate):
Linux 会主动的将系统所发生的各种信息都记录下来,这就是登录档 (第十八章)。 由于系统会一直记录登录信息,所以登录文件将会越来越大!我们知道大型文件不但占容量还会造成读写效能的困扰, 因此适时的将登录文件数据挪一挪,让旧的数据与新的数据分别存放,则比较可以有效的记录登录信息。这就是 logrotate 的任务!这也是系统必要的例行任务;
登录文件分析 logwatch 的任务:
如果系统发生了软件问题、硬件错误、资安问题等,绝大部分的错误信息都会被记录到登录文件中, 因此系统管理员的重要任务之一就是分析登录档。但你不可能手动透过 vim 等软件去检视登录文件,因为数据太复杂了! 我们的 CentOS 提供了一只程序『 logwatch 』来主动分析登录信息,所以你会发现,你的 root老是会收到标题为 logwatch 的信件,那是正常的!你最好也能够看看该信件的内容喔!
建立 locate 的数据库:
在第六章我们谈到的 locate 指令时, 我们知道该指令是透过已经存在的文件名数据库来进行系统上文件名的查询。我们的文件名数据库是放置到 /var/lib/mlocate/ 中。 问题是,这个数据库怎么会自动更新啊?嘿嘿!这就是系统的例行性工作所产生的效果啦!系统会主动的进行 updatedb 喔!
man page 查询数据库的建立:
与 locate 数据库类似的,可提供快速查询的 man page db 也是个数据库,但如果要使用 man page 数据库时,就得要执行 mandb 才能够建立好啊! 而这个 man page 数据库也是透过系统的例行性工作排程来自动执行的哩!
RPM 软件登录文件的建立:
RPM (第二十二章) 是一种软件管理的机制。由于系统可能会常常变更软件, 包括软件的新安装、非经常性更新等,都会造成软件文件名的差异。为了方便未来追踪,系统也帮我们将文件名作个排序的记录呢! 有时候系统也会透过排程来帮忙 RPM 数据库的重新建置喔!
移除暂存档:
某些软件在运作中会产生一些暂存档,但是当这个软件关闭时,这些暂存盘可能并不会主动的被移除。 有些暂存盘则有时间性,如果超过一段时间后,这个暂存盘就没有效用了,此时移除这些暂存盘就是一件重要的工作! 否则磁盘容量会被耗光。系统透过例行性工作排程执行名为 tmpwatch 的指令来删除这些暂存档呢!
与网络服务有关的分析行为:
如果你有安装类似 WWW 服务器软件 (一个名为 apache 的软件),那么你的 Linux 系统通常就会主动的分析该软件的登录文件。 同时某些凭证与认证的网络信息是否过期的问题,我们的 Linux 系统也会很亲和的帮你进行自动检查!
1、仅执行一次的工作排程 at
1.1、atd 的启动:
[root@study ~]# systemctl restart atd # 重新启动 atd 这个服务
[root@study ~]# systemctl enable atd # 让这个服务开机就自动启动
[root@study ~]# systemctl status atd # 查阅一下 atd 目前的状态
1.2、at 的运作方式:使用 at 这个指令来产生所要运作的工作,并将这个工作以文本文件的方式写入 /var/spool/at/ 目录内,该工作便能等待 atd 这个服务的取用与执行了。
at 的工作情况其实是这样的:
- 先找寻 /etc/at.allow 这个文件,写在这个文件中的使用者才能使用 at ,没有在这个文件中的使用者则不能使用 at (即使没有写在 at.deny 当中);
- 如果 /etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 文件中的使用者,就可以使用 at 咯;
- 如果两个文件都不存在,那么只有 root 可以使用 at 这个指令。
1.3、当我们使用 at 时会进入一个 at shell 的环境来让用户下达工作指令,由于指令的下达与 PATH 变量有关, 同时与当时的工作目录也有关连 (如果有牵涉到文件的话),此时,最好使用绝对路径来下达指令,会是比较一劳永逸的方法。
1.4、有些朋友会希望『我要在某某时刻,在我的终端机显示出 Hello 的字样』,然后就在 at 里面下达这样的信息『 echo "Hello" 』。等到时间到了,却发现没有任何讯息在屏幕上显示,这是啥原因啊?这是因为 at 的执行与终端机环境无关,而所有 standard output/standard error output 都会传送到执行者的 mailbox 去啦!所以在终端机当然看不到任何信息。那怎办?没关系, 可以透过终端机的装置来处理!假如你在 tty1 登入,则可以使用『 echo "Hello" > /dev/tty1 』来取代。
1.5、at 有另外一个很棒的优点,那就是『背景执行』的功能了!脱机继续工作的任务: 由于 at 工作排程的使用上,系统会将该项 at 工作独立出你的 bash 环境中, 直接交给系统的 atd程序来接管,因此,当你下达了 at 的工作之后就可以立刻脱机了, 剩下的工作就完全交给 Linux 管理即可!所以啰,如果有长时间的网络工作时,嘿嘿! 使用 at 可以让你免除网络断线后的困扰喔!
1.6、语法:
- at [-mldv] TIME
- at -c 工作号码
选项与参数:
- -m : 当 at 的工作完成后,即使没有输出讯息,亦以 email 通知使用者该工作已完成。
- -l : at -l 相当于 atq,列出目前系统上面的所有该用户的 at 排程;
- -d : at -d 相当于 atrm ,可以取消一个在 at 排程中的工作;
- -v : 可以使用较明显的时间格式栏出 at 排程中的任务栏表;
- -c : 可以列出后面接的该项工作的实际指令内容。
- TIME: 时间格式,这里可以定义出『什么时候要进行 at 这项工作』的时间,格式有:
- HH:MM
- 在今日的 HH:MM 时刻进行,若该时刻已超过,则明天的 HH:MM 进行此工作。
- 例: 04:00
- HH:MM YYYY-MM-DD
- 强制规定在某年某月的某一天的特殊时刻进行该工作!
- 例:04:00 2015-07-30
- HH:MM[am|pm] [Month] [Date]
- 也是一样,强制在某年某月某日的某时刻进行!
- 例:04pm July 30
- HH:MM[am|pm] + number [minutes|hours|days|weeks]
- 就是说,在某个时间点『再加几个时间后』才进行。
- 例:now + 5 minutes
- 例:04pm + 3 days
- HH:MM
语法:
- atq #查询目前主机上面有多少的 at 工作排程
- atrm (jobnumber) #移除指定工作排程
1.7、
范例一:再过五分钟后,将 /root/.bashrc 寄给 root 自己
[root@study ~]# at now + 5 minutes
<==记得单位要加 s 喔!
at> /bin/mail -s "testing at job" root < /root/.bashrc
at> <EOT>
<==这里输入 [ctrl] + d 就会出现 <EOF> 的字样!代表结束!
范例二:将上述的第 2 项工作内容列出来查阅
[root@study ~]# at -c 2
范例三:由于机房预计于 2015/08/05 停电,我想要在 2015/08/04 23:00 关机?
[root@study ~]# at 23:00 2015-08-04
at> /bin/sync
at> /bin/sync
at> /sbin/shutdown -h now
at> <EOT>
范例四:
[root@study ~]# atq
3 Tue Aug 4 23:00:00 2015 a root
# 上面说的是:『在 2015/08/04 的 23:00 有一项工作,该项工作指令下达者为root』而且,该项工作的工作号码 (jobnumber) 为 3 号
范例五:移除工作排程
[root@study ~]# atrm 3 #将第 3 个工作移除!
1.8、batch 系统有空时才进行背景任务
在 CPU 的工作负载(CPU 在单一时间点所负责的工作数量,不是 CPU 的使用率)小于 0.8 的时候,才进行你所下达的工作任务。
[root@study ~]# batch
at> /usr/bin/updatedb
at> <EOT>
job 4 at Thu Jul 30 19:57:00 2015
at
新进程都在/var/spool/at/目录下
/etc/at.allow
/etc/at.deny
cron(crond)系统
crontab命令
/var/spool/cron/"$用户名" 进程文件
/etc/crontab 系统进程文件
/usr/bin/crontab crontab命令的执行文件
/etc/cron.allow 不在这个文件中的使用者不可使用crontab命名
/etc/cron.deny 在这个文件中的使用者不可使用crontab命名
anacron命令
/etc/cron.hourly/0anacron 更新时间戳记
/etc/anacrontab
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架