怎么让LINUX系统定时执行相应的任务

思阳一直让我给他想一个比较好的题目,因为下个礼拜他们培训班要让他讲给同学讲一些平时常用的知识。今天这篇文章《《怎么让LINUX系统定时执行相应的任务》》,希望思阳能带给他的同学们。

在我们平时的工作中,可能会有一些情况或者定时去完成它,为了节省成本,不可能排专人定时定点的去完成这些工作,比如,对于服务器的访问情况,我们需要定时去进行统计,很可能这种统计为10分钟一次,或者站点内容我们需要要每天夜间12点进行更新,等等这些情况,我们都需要进行定时执行。

对于上面的情况,当然在window中,有计划任务这一功能来帮助我们完成这样的任务,那么在linux系统中我们怎么去每天定时完成需要定时执行的任务,所以在这里,我们需要引入LINUX系统中,定时执行服务cron进程,crond守护进程它是操作系统的一部分,在LINUX操作系统中,有很多任务需要有频率性的定时执行,它对于系统来讲也是不可缺少的部分,当然在系统启动时,它是默认启动的。

计划任务分配分为:用户计划任务(crontab)和系统计划任务。

1.用户计划任务:

 每个用户可能设置它自己的计划任务,每个用户的计划任务对其它用户来讲是不可见的,这样就可以防止多用户同时设置而造成相应的设置混乱。用户在想建立计划任务时,使用 crontab命令,不过,为了安全,我们可以限制使用crontab 的用户帐号。使用的限制有:

  •   /etc/cron.allow:将可以使用crontab的命令帐号写入其中,不在这个文件中的用户不可以使用crontab命令。
  •  /etc/cron.deny:如果想要禁止那些用户使用crontab命令,那么我们就可以把它的用户帐号写在这个文件中。

注意:对于上面两个文件,cron.allow的优先级比cron.deny的高,也就是说,cron.allow中如果设置了某个用户的账号,那怕我们再把他的账号写到cron.deny中,那么该账号照样能执行crontab命令。一旦用户发现前面文件中存在了用户账号,系统将忽略该账号在后面文件的设置,所以一般我们在设置访问权限的时间,都只设置一个就行了。在添加账号时,为一个账号一行的格式进行添加。

用户所设置的所有计划任务保存在/var/spool/cron中,比如我现在以hqlong这个账号登录,并设置了相应的计划任务,那么在/var/spool/cron中就会生成一个hqlong的文本文件,文件里面为我的计划任务。

另外,cron执行的每一项工作都会记录在/var/log/cron这个登录文件中,所以我们可以通过查看该文件来了解系统的计划任务的执行情况。

crontab的语法:

 

[hqlong@linux~]# crontab [-u username] [-l | -e | -r]\
参数:
 -u :只有root才能执行这个任务,即可能帮助其它用户设置任务
 -e :编辑crontab的工作内容
 -l :查看所有的工作内容
 -r :删除crontab的工作内容

举例:
 1.用hqlong在每天的12:00发信给自己
[hqlong@linux~]# crontab -e
#打开crontab文件,这里我们可以在里面编辑我们的任务,每项任务只能为一行
0  12  *  *  * mail hqlong -s "at 12:00" << /home/hqlong/.bashrc
分 时 日 月 周 !<=============命令行===============>

编辑完毕后,输入:wq就可以保存并退出,如果我们想查看自己设置了哪些计划任务的话,我们就可以通过

 

[hqlong@linux~]# crontab -l
0  12  *  *  * mail hqlong -s "at 12:00" << /home/hqlong/.bashrc

在查看。当然,如果想编辑某一项任务,或者删除某一条任务,我们可以使用

 

[hqlong@linux~]# crontab -e
0  12  *  *  * mail hqlong -s "at 12:00" << /home/hqlong/.bashrc

这里,就可以对里面的内容进行编辑。

就这么几步,系统就会准备在每天的12:00向自己发送一封信件。

如果想删除所有的计划任务,我们可以使用

 

[hqlong@linux~]# crontab -r

注意:这里,将删除当前用户的所有计划任务,如果只是想删除某一项,我们最好使用编辑编辑选项(即:-e)来进行删除

时间参数含义: 

代表含义 分钟 小时 日期 月份
数字范围 0~59 0~23 1~31 1~12 0~7

 比较有意思的是“周”。当周为0或7时,都表示“星期天”。另外,还有一些辅助的字符,如下:

特殊字符 代表意义
* 表示任何时间都接受,举例来讲,在前面的例子中,日、月、周都是*,表示"不论何月,何日星期几的12:00都执行后续命令
表示分隔时段的意思,举例来说,如果要执行的工作是在3:00与6:00就会是:0,3,6 * * *  命令,还有5栏,不过第2栏是3,6表示3与6都适用
-

表示一段时间范围内,如8点到12点之间,每小时的20分都进行一项工作:

20 8-12 * * * 命令

第二栏变成8-12.表示8,9,10,11,12都适用。

/n

n代表数字,即“每隔N单位时间”,例如:每5分钟都进行一项任务,则:

*/5 * * * * 命令

很简单。*写/5,也可以写成0-59/5,意思相同

 2.系统计划任务

在设置系统计划任务时,我们是直接在/etc/crontab这个文件中进行编辑的,设置语法大致和上面的差不多,只是里面多了几个项,如

run-parts:将执行后面所跟的文件夹里的所有文件、

当对用/etc/crontab进行编辑完成以后,可能我们的设置暂时不会生效,因为系统是将该该的内容读取到了内存中的,这时,内存中读取的数据还没有刷新,如果想将该任务马上生效,我们可以启动cron进程

 

/etc/init.d/crond restart

……

参考资料:鸟哥的LINUX私房菜

机器人 2007-12-13 22:22 于 北京

 

此条目发表在 linux/server 分类目录,贴了 , , , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>