定时任务管理之Linux篇crontab使用

     在工程项目中,难免需要用到一些定时执行的任务。对于java这种常驻内存的语言,比较容易解决,java自身就提供了定时任务,而且还有优秀的第三方开源工具quartz。但是像php、python这样脚本语言,定时任务就需要借助于操作系统的定时任务管理。不过python也有一个优秀的第三方开源插件celery完成定时任务的执行。这里我们就看一下linux操作系统定时任务管理器crontab的使用。

一、认识crond服务

    1、crond是Linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。而Linux任务调度的工作主要分为以下两类:

  ①系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存

  ②个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置

 2、Crontab是UNIX系统下的定时任务触发器,其使用者的权限记载在下列两个文件中:

  ①/etc/cron.deny 该文件中所列的用户不允许使用Crontab命令

  ②/etc/cron.allow 该文件中所列的用户允许使用Crontab命令

 3、/var/spool/cron/ 是所有用户的crontab文件

   4、启动、停止、查看crond服务:

    ①启动:service crond start

    ②停止:service crond stop

    ③查看:service crond status

二、认识crontab

1、crontab命令

    ①crontab -l :列出当前的crontab任务 
    ②crontab -d :删除当前的crontab任务 
    ③crontab -e (solaris5.8上面是 crontab -r) :编辑一个crontab任务,ctrl_D结束 
    ④crontab filename :以filename做为crontab的任务列表文件并载入

2、crontab配置

    时程表的格式如下 : f1 f2 f3 f4 f5 program

  • 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。 
  • 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其余类推
  • 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推
  • 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
  • 当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其馀类推
  • 使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。

3、配置实例

    ①每天早上7点执行一次 /bin/ls : 

        0 7 * * * /bin/ls

    ②在 12 月内, 每天的早上 6 点到 12 点中,每隔3个小时执行一次 /usr/bin/backup :

       0 6-12/3 * 12 * /usr/bin/backup

    ③周一到周五每天下午 5:00 寄一封信给[email protected]:
       0 17 * * 1-5 mail -s "hi"[email protected]< /tmp/maildata
    ④每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"
       20 0-23/2 * * * echo "haha"

4、查看crontab的执行情况

    crontab默认情况下把执行日志写在/var/log下面,如:

ls /var/log/cron*
//输出结果为
/var/log/cron /var/log/cron.1 /var/log/cron.2 /var/log/cron.3 /var/log/cron.4

    其中/var/log/cron就是crontab的最新日志信息。通过查看cron日志,我们就可以了解在crontab中配置的任务是否正常执行。

    crontab的日志比较简单,我们也可以为crontab中的任务增加自己的日志,这样出错后,比较容易看到原因。例如:

#把错误输出和标准输出都输出到mylog.log中
0 6 * * * $HOME/for_crontab/createTomorrowTables >> $HOME/for_crontab/mylog.log 2>&1
#注意:不要写成
0 6 * * * $HOME/for_crontab/createTomorrowTables 2>&1 >> $HOME/for_crontab/mylog.log
#否则就输出到标准输出了

猜你喜欢

转载自student-lp.iteye.com/blog/2093396