在工程项目中,难免需要用到一些定时执行的任务。对于java这种常驻内存的语言,比较容易解决,java自身就提供了定时任务,而且还有优秀的第三方开源工具quartz。但是像php、python这样脚本语言,定时任务就需要借助于操作系统的定时任务管理。不过python也有一个优秀的第三方开源插件celery完成定时任务的执行。这里我们就看一下linux操作系统定时任务管理器crontab的使用。
crontab命令用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。
cron 系统调度进程。 可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行。cron是系统主要的调度进程,可以在无需人工干预的情况下运行作业。crontab命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个crontab文件来保存调度信息。系统管理员可以通过cron.deny 和 cron.allow 这两个文件来禁止或允许用户拥有自己的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 file [-u user]-用指定的文件替代目前的crontab。
crontab-[-u user]-用标准输入替代目前的crontab.
crontab-1[user]-列出用户目前的crontab.
crontab-e[user]-编辑用户目前的crontab.
crontab-d[user]-删除用户目前的crontab.
crontab-c dir- 指定crontab的目录。
crontab文件的格式:M H D m d cmd.
2、crontab文件格式
* * * * * command
分 时 日 月 周 命令
第1列表示分钟1~59, 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
参数 :
crontab -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数
来指定使用那个文字编辑器(比如说
crontab -r : 删除目前的时程表
crontab -l : 列出目前的时程表
crontab file [-u user]-用指定的文件替代目前的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 寄一封信给alex@domain.name:
0 17 * * 1-5 mail -s "hi"alex@domain.name< /tmp/maildata
④每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"
20 0-23/2 * * * echo "haha"
4、查看crontab的执行情况
crontab默认情况下把执行日志写在/var/log下面,如:
其中/var/log/cron就是crontab的最新日志信息。通过查看cron日志,我们就可以了解在crontab中配置的任务是否正常执行。
crontab的日志比较简单,我们也可以为crontab中的任务增加自己的日志,这样出错后,比较容易看到原因。例如: