【鸟哥的linux私房菜-学习笔记】例行性工作排程 (crontab)

Linux 工作排程的分类:

两种工作排程方式:

一种是例行性的,就是每隔一定的周期要来办的事项;
一种是突发性的,就是这次做完以后就没有了。

at :可以处理仅运行一次就结束排程的命令,不过要运行 at 时, 必须要有 atd 这个服务的支持才行。在某些新版的 distributions 中,atd 可能默认并没有启动,那么 at 这个命令就会失效。不过我们的 CentOS 默认是启动的!

crontab :这个命令所配置的工作将会循环的一直进行下去,可循环的时间为分钟、小时、每周、每月或每年等。crontab 除了可以使用命令运行外,亦可编辑 /etc/crontab 来支持。 至於让 crontab 可以生效的服务则是 crond 这个服务。

Linux 上常见的例行性工作

进行登录档的轮替 (log rotate);

登录档分析 logwatch 的任务;

创建 locate 的数据库;

whatis 数据库的创建;

RPM 软件登录档的创建;

移除缓存档;

与网络服务有关的分析行为。

仅运行一次的工作排程

atd 的启动:

[root@www ~]# /etc/init.d/atd restart
# 再配置一下启动时就启动这个服务,免得每次重新启动都得再来一次!
[root@www ~]# chkconfig atd on

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 这个命令。

实际运行单一工作排程

[root@www ~]# at [-mldv] TIME
[root@www ~]# at -c 工作号码
选项与参数:
-m  :当 at 的工作完成后,即使没有输出信息,亦以 email 通知使用者该工作已完成。
-l  :at -l 相当於 atq,列出目前系统上面的所有该使用者的 at 排程;
-d  :at -d 相当於 atrm ,可以取消一个在 at 排程中的工作;
-v  :可以使用较明显的时间格式列出 at 排程中的工作列表;
-c  :可以列出后面接的该项工作的实际命令内容。

*最好使用绝对路径来下达命令~

由於 at 工作排程的使用上,系统会将该项 at 工作独立出你的 bash 环境中, 直接交给系统的 atd 程序来接管,因此,当你下达了 at 的工作之后就可以立刻离线了, 剩下的工作就完全交给 Linux 管理即可。

at 工作的管理

我们可以利用 atq 来查询工作安排,利用 atrm 来删除错误的命令。

batch:系统有空时才进行背景任务

他会在 CPU 工作负载小於 0.8 的时候,才进行你所下达的工作任务。

负载的意思是: CPU 在单一时间点所负责的工作数量。不是 CPU 的使用率!当 CPU 的工作负载越大,代表 CPU 必须要在不同的工作之间进行频繁的工作切换。

循环运行的例行性工作排程

使用者的配置

为了安全性的问题, 与 at 同样的,我们可以限制使用 crontab 的使用者帐号,使用的限制数据有:

/etc/cron.allow:
将可以使用 crontab 的帐号写入其中,若不在这个文件内的使用者则不可使用 crontab;

/etc/cron.deny:
将不可以使用 crontab 的帐号写入其中,若未记录到这个文件当中的使用者,就可以使用 crontab 。

当使用者使用 crontab 这个命令来创建工作排程之后,该项工作就会被纪录到 /var/spool/cron/ 里面去了,而且是以帐号来作为判别的。另外, cron 运行的每一项工作都会被纪录到 /var/log/cron 这个登录档中。

语法:

[root@www ~]# crontab [-u username] [-l|-e|-r]
选项与参数:
-u  :只有 root 才能进行这个任务,亦即帮其他使用者创建/移除 crontab 工作排程;
-e  :编辑 crontab 的工作内容
-l  :查阅 crontab 的工作内容
-r  :移除所有的 crontab 的工作内容,若仅要移除一项,请用 -e 去编辑。

系统的配置档: /etc/crontab

这个『 crontab -e 』是针对使用者的 cron 来设计的,如果是『系统的例行性任务』时, 只要编辑 /etc/crontab 这个文件就可以。 crontab -e 这个 crontab 其实是 /usr/bin/crontab 这个运行档,但是 /etc/crontab 可是一个『纯文字档』。

基本上, cron 这个服务的最低侦测限制是『分钟』,所以『 cron 会每分钟去读取一次 /etc/crontab 与 /var/spool/cron 里面的数据内容 』,因此,只要你编辑完 /etc/crontab 这个文件,并且将他储存之后,那么 cron 的配置就自动的会来运行了!

tips:重新启动 crond 服务使用: /etc/init.d/crond restart

可唤醒停机期间的工作任务

如果你的 Linux 主机是作为 24 小时全天、全年无休的服务器之用,那么你只要有 atd 与 crond 这两个服务来管理你的例行性工作排程即可。如果你的服务器并非 24 小时无间断的启动,那么你该如何进行例行性工作?

什么是 anacron

anacron 并不能指定何时运行某项任务, 而是以天为单位或者是在启动后立刻进行 anacron 的动作,他会去侦测停机期间应该进行但是并没有进行的 crontab 任务,并将该任务运行一遍后,anacron 就会自动停止了。

你可能感兴趣的:(linux,crontab,例行工作排程)