例行性工作排程可以理解为定时任务。主机自动在某时间开始固定的进程或者服务。Linux的工作排程有两种:at、crontab
at 是突发性的,执行完一次就不再执行。此指令需要atd服务支持。
crontab 是周期性的,比如每到下午五点进行数据库更新。此指令需要crond服务支持。crontab 除了可以使用命令运行外,亦可编辑 /etc/crontab 来支持。
Linux 上常见的例行性工作
如果你曾经使用过 Linux 一阵子了,那么你大概会发现到 Linux 会主动的帮我们进行一些工作呢! 比方说自动的进行线上升级 (on-line update)、自动的进行 updatedb (第七章谈到的 locate 命令) 升级档名数据库、自动的作登录档分析 (所以 root 常常会收到标题为 logwatch 的信件) 等等。这是由於系统要正常运行的话, 某些在背景底下的工作必须要定时进行的缘故。基本上 Linux 系统常见的例行性任务有:
进行登录档的轮替 (log rotate):
Linux 会主动的将系统所发生的各种资讯都记录下来,这就是登录档 (第十九章)。 由於系统会一直记录登录资讯,所以登录档将会越来越大!我们知道大型文件不但占容量还会造成读写效能的困扰, 因此适时的将登录档数据挪一挪,让旧的数据与新的数据分别存放,则比较可以有效的记录登录资讯。这就是 log rotate 的任务!这也是系统必要的例行任务;
登录档分析 logwatch 的任务:
如果系统发生了软件问题、硬件错误、资安问题等,绝大部分的错误资讯都会被记录到登录档中, 因此系统管理员的重要任务之一就是分析登录档。但你不可能手动透过 vim 等软件去检视登录档,因为数据太复杂了! 我们的 CentOS 提供了一只程序『 logwatch 』来主动分析登录资讯,所以你会发现,你的 root 老是会收到标题为 logwatch 的信件,那是正常的!你最好也能够看看该信件的内容喔!
创建 locate 的数据库:
在第七章我们谈到的 locate 命令时, 我们知道该命令是透过已经存在的档名数据库来进行系统上档名的查询。我们的档名数据库是放置到 /var/lib/mlocate/ 中。 问题是,这个数据库怎么会自动升级啊?嘿嘿!这就是系统的例行性工作所产生的效果啦!系统会主动的进行 updatedb 喔!
whatis 数据库的创建:
与 locate 数据库类似的,whatis 也是个数据库,这个 whatis 是与 man page 有关的一个查询命令,不过要使用 whatis 命令时, 必须要拥有 whatis 数据库,而这个数据库也是透过系统的例行性工作排程来自动运行的哩!
RPM 软件登录档的创建:
RPM (第二十三章) 是一种软件管理的机制。由於系统可能会常常变更软件, 包括软件的新安装、非经常性升级等,都会造成软件档名的差异。为了方便未来追踪,系统也帮我们将档名作个排序的记录呢! 有时候系统也会透过排程来帮忙 RPM 数据库的重新建置喔!
移除缓存档:
某些软件在运行中会产生一些缓存档,但是当这个软件关闭时,这些缓存档可能并不会主动的被移除。 有些缓存档则有时间性,如果超过一段时间后,这个缓存档就没有效用了,此时移除这些缓存档就是一件重要的工作! 否则磁碟容量会被耗光。系统透过例行性工作排程运行名为 tmpwatch 的命令来删除这些缓存档呢!
与网络服务有关的分析行为:
如果你有安装类似 WWW 服务器软件 (一个名为 apache 的软件),那么你的 Linux 系统通常就会主动的分析该软件的登录档。 同时某些凭证与认证的网络资讯是否过期的问题,我们的 Linux 系统也会很亲和的帮你进行自动检查!
其实你的系统会进行的例行性工作与你安装的软件多寡有关,如果你安装过多的软件,某些服务功能的软件都会附上分析工具, 那么你的系统就会多出一些例行性工作罗!像鸟哥的主机还多加了很多自己撰写的分析工具,以及其他第三方协力软件的分析软件, 嘿嘿!俺的 Linux 工作量可是非常大的哩!因为有这么多的工作需要进行,所以我们当然得要了解例行性工作的处理方式罗!
先说at
启动atd
我们使用 at 这个命令来产生所要运行的工作,并将这个工作以文字档的方式写入 /var/spool/at/ 目录内,该工作便能等待 atd 这个服务的取用与运行。
另外,我们对使用 at 这个指令的账户也是存在限制的,主要通过 /etc/at.allow 与 /etc/at.deny 这两个文件来进行 at 的使用限制,加上这两个文件后, at 的工作情况是这样的:
1 .先找 /etc/at.allow 这个文件,写在这个文件中的使用者才能使用 at ,没有在这个文件中的使用者则不能使用 at (即使没有写在 at.deny 当中);
2.如果 /etc/at.allow 不存在,就找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 文件中的使用者,就可以使用 at 啦;
3.如果两个文件都不存在,那么只有 root 可以使用 at 这个命令。
运行at
查看任务和移除任务:
batch 系统空闲时执行(cpu负载低于0.8)
再来看crontab
crontab 命令也是存在使用限制的,它也是通过文件 /etc/cron.allow 和 /etc/cron.deny 两个文件来做限制的,具体的规则同 at 指令的限制。
使用 crontab 这个命令创建工作排程之后,该项工作将会被记录到 /var/spool/cron/ 里,而且是以帐号来作为判别的。举例来说,wy 使用 crontab 后, 他的工作会被记录到 /var/spool/cron/wy 里,但需要注意的是,不要使用 vi 直接编辑该文件, 因为可能由于输入语法错误,会导致无法运行 cron 。另外,cron 运行的每一项工作都会被纪录到 /var/log/cron 这个登录档中,所以,如果你的 Linux 不知道有否被植入木马时,也可以搜寻一下 /var/log/cron 这个登录档。
查询与移除
系统配置文件
cron 这个服务的最低侦测限制是“分钟”,所以 cron 会每分钟去读取一次 /etc/crontab 与 /var/spool/cron 里面的数据内容,因此,只要编辑完 /etc/crontab 这个文件,并且将它储存之后,那么 cron 的配置就自动的会来运行。
可唤醒停机期间的工作任务 anacron
转自https://www.cnblogs.com/wy2185/p/5752314.html
anacron 存在的目的就是处理非24小时一直启动的Linux系统的crontab的运行。
anacron 并不能指定何时运行某项任务,而是以天为单位或者是在启动后立刻进行 anacron 的动作,他会去侦测停机期间应该进行但是并没有进行的crontab任务,并将该任务运行一遍后,anacron就会自动停止。
anacron 会以一天、七天、一个月为期去侦测系统未进行的crontab任务。
anacron 的工作原理:anacron 会去分析现在的时间与时间记录档所记载的上次运行 anacron 的时间,两者比较后若发现有差异,那就是在某些时刻没有进行 crontab任务。此时 anacron 就会开始运行未进行的 crontab任务了。所以 anacron 其实也是透过 crontab 来运行的。因此 anacron 运行的时间通常有两个,一个是系统启动期间运行,一个是写入 crontab 的排程中。这样才能够在特定时间分析系统未进行的 crontab 任务。
anacron 其实是一支程序而不是一个服务,这支程序在 CentOS 当中已经进入 crontab 的排程中。