怎么让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 于 北京