linux例行性工作调度学习(一)
Linux系统中有一种例行性工作(crontab)可以调度,是通过crontab和at来实现的。
这两种工作调度:
一种是例行性的,就是每隔一定的周期要来办的事项。
一种是突发性的,就是这次做完以后就没有的那种。
at:at是个可以处理仅执行一次就结束调度的命令,不过要执行at时,必须要有atd这个服务的支持才行。在某些新版的distributions中,atd可能默认并没有启动,那么at这个命令就会失效,不过我们CentOS默认是启动的。
Crontab:crontab这个命令所设置的工作将会循环一直进行下去。可循环的时间为分钟、小时、每周、每月、每年等。Crontab除了可以使用命令执行外,也可编辑/etc/crontab来支持。至于让crontab可以生效的服务则是crond这个服务。
Linux上常见的例行性工作
- 进行日志文件的轮替(log rotate)
Linux会主动将系统所发生的各种信息都记录下来,这就是日志文件。由于系统会一直记录日志信息,所以日志文件将会越来越大。我们知道大型文件不但占容量,还会造成读写性能的困扰,因此实时将日志文件数据挪一挪,让旧的数据与新的数据分别存放,则比较可以有效地记录日志信息。这就是log rotate的任务,这也是系统必要的例行任务。
- 日志文件分析logwatch的任务
如果系统发生了软件问题、硬件错误等,绝大多部分的错误信息都会被记录到日志文件中,因为此系统管理员的重要任务之一就是分析日志文件,但你不可能动手通过vi的软件去检查日志文件,因为数据太复杂了,我们的CentOS提供一个程序“logwatch”来主动分析日志信息,所有你会发现,你的root老是收不到标题为logwatch的信件,那是正常的。你最好能看看该信件的内容。
- 新建locate的数据库
Locate这个命令是通过已经存在的文件名数据库来进行系统中文件名的查询。我们的文件名数据库是放置到/var/lib/mlocate/中。问题是,这个数据库怎么会自动更新呢?这就是系统的例行性工作所产生的效果了,系统会主动进行updatedb。
- Whatis数据库的建立
与locate数据库类似的,whatis也是数据库,这个whatis是与man page有关的一个查询命令,不过要使用whatis命令时,必须要拥有whatis数据库,而这个数据库也是通过系统的例行性工作调度来自动执行的。
- RPM软件日志文件的新建
PRM是一种软件管理的机制。由于系统可能会经常更改软件,包括软件的新安装、非经常性更新等,都会造成软件文件名的区别。为了方便未来跟踪,系统也帮我们将文件名做个排序的记录呢,有时系统也会通过调度来帮助RPM数据库的重新生成。
- 删除临时文件
某些软件在运行中会产生一些临时文件,但是当这个软件关闭时,这些临时文件可能并不会主动被删除。有些临时文件则有时间性,如果超过一段时间后,这个临时文件就没用了,此时删除这些临时文件就是一件重要的工作,否则磁盘空间会被耗光。系统通过例行性工作调度执行名为tmpwatch的命令删除这些临时文件。
- 与网络服务有关的分析行为
如果你有安装类型www服务器软件(一个名为apache的软件),那么你的linux系统通常就会主动分析该软件的日志文件,同时某些认证的网络信息是否过期的问题,我们的Linux系统也会帮我们进行自动检测。
仅执行一次的工作调度
atd的启动与at运行的方式
要使用单一工作调度时,我们的Linux系统上面必须要有负责这个调度的服务,那就是atd。不过并非所有的Linux distributions都默认会把它打开,所以,某些时刻我们必须要手动将它启动才行。启动的方法很简单。
/etc/init.d/atd restart 正在停止atd: [确定] 正在激活 atd: [确定] #再设置一下开机时就启动这个服务,免得每次重新启动都得再来一次 Chkconfig atd on |
at的运行方式
- 既然是工作调度,那么应该会有产生工作的方式,并且将这些工作排进日程表中。那么生成工作的方式是怎么进行的?事实上,我们使用at这个命令来生成所要运行的工作,并将这个工作以文本文件的方式写入/var/spool/at/目录内,该工作便能等待atd这个服务的取用与执行了,就这么简单。
- 不过,并不是所有的人都可以进入at工作调度。为什么?因为安全的理由,很多主机被所谓的“绑架”后,最常发现的就是他们的系统当中多了很多的骇客程序,这些程序非常可能运用工作调度来执行或搜集系统信息,并定时回报给黑客团队。所以,除非你认可的账号,否则先不要让他们使用at吧!那么怎样使用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这命令。
- 通过这个说明,我们知道/etc/at.allow 是管理较为严格的方式,而/etc/at.deny则较为松散(因为账号没有在该文件中,就能够执行at了)。在一般的distributions当中,由于假设系统上的所有用户都是课信任的,因为系统通常会保留一个空的/etc/at.deny文件,意识是允许所有使用at命令的意识(你可以自行检查一下该文件)。不过,万一你不希望有某些用户使用at的话,将那个用户的账号写入/etc/at.deny即可!一个账号写一行。
实际运行一个工作调度
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 ex>04:00 在今日的HH:MM时刻进行,若已超出该时刻,则明天的HH:MM进行此工作。 HH:MM YYYY-MM-DD ex>04:00 2009-03-17 强制规定在某年某月某一天的特殊时刻进行该工作。 HH:MM[am|pm] [month] [Data] ex>04pm March 17 也是一样,强制在某年某月某日的某时刻进行。 HH:MM[am|pm] + number [minutes|hours|days|weeks] ex> now +5 minutes ex> 04pm+ 3days 在某个时间点“再加上几个时间后”才执行。 |
范例一:再过5分钟后,将/root/.bashrc 寄给root自己 at now +5 minutes /bin/mail root –s “testing at job” < /root/.bashrc <EOT> <=这里输入[ctrl]+d就会出现<EOF>的字样,代表结束。 |
循环执行的例行性工作调度
相对于at是仅执行一次的工作,循环执行的例行性工作调度则是由cron(crond)这个系统服务来控制的。刚才谈到linux系统上面原本就非常多的例行性工作,因为这个系统服务是默认启动。另外,由于用户自己也可以进行例行性工作调度,所以Linux也提供用户控制例行性工作调度的命令(crotab)。
用户设置
用户想要新建循环型工作调度时,使用的是crontab这命令。不过,为了安全性问题,与at类似,我们也可以限制使用crontab的用户账号。使用的限制数据有:
/etc/cron.allow
将可以使用crontab的账号写入其中,若未记录到这个文件当中的用户,就不可以使用crontab。、
/etc/cron.deny
将不可以使用crontab的账号写入其中,若未记录到这个文件当中的用户,就可以使用crontab。