Linux学习之例行性工作

来源:互联网 发布:达内软件培训班 编辑:程序博客网 时间:2024/05/22 02:08

       例行性工作就是周期执行的一些工作,比如定期发邮件等等。在Linux中,例行性工作是通过crontab和at进行调度的,所谓调度就是将这些工作安排执行的流程。

在Linux中有两种工作调度的方式:一种是例行性的,每隔一定的周期执行一次,用crontab来处理;另一种就是突发性的,执行完之后就没了,用at来处理。

一  仅执行一次的工作调度

      单一工作调度的运作,使用at命令来运行。

      at命令使用atd服务,atd的启用方法是:/etc/init.d/atd restart,要设置成开机启动,就使用 chkconfig  atd  on

      at的运行方式:我们使用at这个命令来生成所要运行的工作,并将这个工作以文本文件的方式写入/var/spool/at目录内,该工作便能等待atd这个服务的取用与执行了。并非所有用户都可以进行at调度,/etc/at.allow和/etc/at.deny决定了允许或者禁止那些用户可以进行at调度。

       atq命令查看目前主机上有多少个at工作调度;atrm  [jobnumber]删除工作号为jobnumber的工作调度。

--------------------------------------------------------------------------------------------------------------------------------------------------

at命令的示例:

[root@MyCentos buptlsl]# at 23:00 2014-03-23at> /bin/syncat> /bin/syncat> /sbin/shutdown -h nowat> <EOT>

我们使用at时会进入一个at shell的环境来让用户执行工作命令,此时最好使用绝对路径来执行你的命令。完成命令输入后按下Ctrl+d结束,会有一个<EOT>符号。

我们使用atq来查询at工作调度:

[root@MyCentos buptlsl]# atq2    2014-03-23 23:00 a root

输出信息意为在2014/3/23的23:00有一项工作,执行者为root,而且该项工作的jobnumber为2.

然后,我们可以使用命令atrm  [jobnumber]来删除这个at工作调度

[root@MyCentos buptlsl]# atrm 2[root@MyCentos buptlsl]# atq[root@MyCentos buptlsl]# 
再使用atq查询,没有任何输出,说明调度已被删除。

--------------------------------------------------------------------------------------------------------------

二  例行性工作调度

crontab语法:

crontab  [-u username]  [-l|-e|-r]

-u:只有root用户才能执行,帮助其他用户新建/删除crontab工作调度

-e:编辑crontab的工作内容

-l:查询crontab的工作内容

-r:删除所有crontab的工作内容,如果想仅删除一项,请使用-e去编辑

同样的,/etc/cron.allow和/etc/cron.deny允许和禁止那些用户使用crontab进行工作调度。

当用户使用crontab这个命令来新建工作调度之后,该项工作就被记录到/var/spool/cron/里面,而且是以帐号来命名。cron执行的每一项工作都会被记录到/var/log/cron这个日志文件里面。

crontab  -e回车后会进入vim界面,你就可以编辑自己的例行性工作调度了,每项工作都是一行,例如:

    0 12  *   *   *  mail buptlsl -s "at 12:00" < /home/buptlsl/.bashrc

#分 时 日 月 周

这个例子表示每天的12点给buptlsl发一封邮件,邮件标题为at 12:00,邮件内容读取自文件/home/buptlsl/.bashrc

每项工作的格式都具有六个字段,每个字段之间都有空格,各字段意义如下:代表意义分钟小时日月份周命令数字范围
0~590~231~311~120~7命令

周的数字0或7都代表周日。

/n表示每隔n个时间单位间隔执行一次,例如每5分钟执行一次即为:*/5 * * * *  command也可以写成0-59/5

*表示任何时刻都接受的意思

,逗号表示分隔时间段的意思,如果执行命令的时刻为3时或6时,则为* 3,6 * * *  command

-表示一段时间范围,例如8点到12点,用8-12表示

-------------------------------------------------------------------------------------------------------------------------------------------------------------

三 系统的配置文件:/etc/crontab、

前面的crontab -e 是针对用户的cron设计的,而系统的例行性工作都在/etc/crontab这个文件中,只需要编辑这个文件就可以修改系统的例行性工作了。crond服务会每分钟去读取一次/etc/crontab文件和/var/spool/文件夹里面的内容。

需要区别的是,crontab -e这个crontab其实是/usr/bin/crontab这个执行文件,但是/etc/cronab是一个纯文本文件。

[root@MyCentos buptlsl]# cat /etc/crontabSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# For details see man 4 crontabs# Example of job definition:# .---------------- minute (0 - 59)# |  .------------- hour (0 - 23)# |  |  .---------- day of month (1 - 31)# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat# |  |  |  |  |# *  *  *  *  *  command to be executed
MAILTO=root表示当例行性命令有错误或者有输出结果时,会将信息传给root,这个地方可以改成你自己的邮箱,例如:haha@gmail.com
例如:

01* ** * root run-parts/etc/cron.hourly//每个小时去执行一遍/etc/cron.hourly内的脚本
02 4* ** root run-parts/etc/cron.daily//每天去执行一遍/etc/cron.daily内的脚本
22 4* *0 root run-parts/etc/cron.weekly//每星期去执行一遍/etc/cron.weekly内的脚本
42 41 ** root run-parts/etc/cron.monthly//每个月去执行一遍/etc/cron.monthly内的脚本
时间字段和命令字段之间有一个身份字段,表示执行命令的用户身份,此处为root

0 0