工作中遇到需要定时每周执行所写的python脚本,本来想使用python的定时任务框架,结果网上发现linux中提供crontab可以执行定时任务,省了好多代码,下面分享一下crontab


语法介绍

crontab命令说明

使用权限:

root用户和crontab文件的所有者

语法:

crontab [-e [UserName]|-l [UserName]|-r [UserName]|-v [UserName]|File ]

说明:

crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。

参数:

-e [UserName]: 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)

-r [UserName]: 删除目前的时程表

-l [UserName]: 列出目前的时程表

-v [UserName]:列出用户cron作业的状态

时程表的格式如下:

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 的方式来设定时程表。


用VI编辑一个文件 cronfile,然后在这个文件中输入格式良好的时程表。编辑完成后,保存并退出。 

在命令行输入

$: crontab cronfile

这样就将cronfile文件提交给c r o n进程,同时,新创建cronfile的一个副本已经被放在/ v a r / s p o o l / c r o n目录中,文件名就是用户名。

在cronfile中写入的执行脚本如下:

0 * * * * /usr/bin/python ~/task.py

这里一定要注意,执行命令和执行脚本都要写全路径,不然执行会不生效


因为crontab没有输出信息,需要使用重定向到文件,或者python中可以使用日志功能也可以不重定向

0 * * * * /usr/bin/python ~/task.py >> task.log


crontab的一下日期格式用法,可以自行百度