Linux定时任务crontab使用教程

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

在日常的开发中,crontab(时程表)应该是最常用的指令之一,下面我们来看看百度百科的解释:

crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语 chronos(χρνο),原意是时间。通常,crontab储存的指令被守护进程激活, crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。

简而言之, 当我们有一些需要周期性被调用的指令或脚本。比如每天凌晨需要调用一个脚本去更新某些数据,每分钟要调个脚本检测一些数据等等之类的。

crontab命令(用来管理我们整个时程表的命令,一个时程表下可以有多个调度任务)的语法如下:

crontab [-u user] [ -e | -l | -r ]
crontab [-u user] file

参数的解释:

crontab file:根据file的内容来设定时程表

-e: 执行文字编辑器来设定时程表,内定的文字编辑器是 VI
-r: 删除目前的时程表
-l: 列出目前的时程表
-u [user]:默认就是操作当前用户的时程表,
          如果你拥有编辑其他用户时程表的权限(比如你是root用户),
          那么加上这个参数,就表示操作该用户的时程表
          如加上-u admin,表示操作admin用户的时程表

crontab命令的例子:

列出leo这个用户的crontab文件:
$ crontab -u leo -l

使用编辑器打开crontab文件的条目,对其进行编辑(如果想停用某个调度任务,又不想直接将其删除,可以在前面加上#注释):
$ crontab -e

删除crontab文件:
$ crontab -r

如果已经有了自己编辑的crontab文件,想直接导入到crontab中:
$ crontab 

下面我们来创建自己的一个任务调度(通过-e命令):

crontab -e

然后进入到了vi编辑页面,可以编辑我们的调度任务,具体的格式如下:

 .---------------- minute (0 - 59)
 |  .------------- hour (0 - 23)
 |  |  .---------- day of month (1 - 31)
 |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
 |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
 |  |  |  |  |
 f1 f2 f3 f4 f5 command

最后一行即我们的格式,其中 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...个小时要执行,以此类推

下面通过一些例子来帮助理解:

0 * * * * python /home/a.py     //每月每天每小时的第0分钟执行一次 python /home/a.py命令

*/20 6-12 * 12 * /usr/bin/backup    //在12月内,每天的早上6点到12点中,每隔20分钟执行一次/usr/bin/backup 

0 17 * * 1-5 echo "hi"    //周一到周五每天下午5点,执行echo "hi"命令

20 0-23/2 * * * echo "haha"    //每月每天的0点-23点,每隔2小时的第20分钟,执行 echo "haha"命令

0 23-7/2,8 * * * date    //晚上11点到早上7点之间每隔两个小时还有早上8点,执行date命令

43 21 * * * /usr/bin/backup     //每天的21:43 执行/usr/bin/backup

0 9 * * 1 echo "what a day"     //每周一的早上9点执行 ehco "what a day"

0,10 17 * * 0,2,3 /home/b.sh      //每周日,周二,周三的下午5点和下午5点10分执行/home/b.sh

0-10 17 1 * * /home/c.sh     //毎月1日从17:00到17:10,毎隔1分钟,执行/home/c.sh

42 4 1 * * /home/back.sh      //毎月1日的 4:42分 执行/home/back.sh

0 18 * * 1-6 echo "haha"    //周一到周六下午6点执行echo "haha"

0,10,20,30,40,50 * * * * echo "en..."   //每隔10分 执行echo "en..."

*/10 * * * * echo "en..."   //每隔10分 执行echo "en..."

以上主要侧重反映前5个时间参数的不同,下面列一些command参数的一些主意事项:

1.当运行的命令有输出,而你又不想让它输出时,可以将其重定向到空文件:

1 * * * * python /home/a.py >/dev/null 2>&1 

2.同理,也可以把输出重定向自定义日志中去,方便后期检查:

1 * * * * python /home/a.py > /home/log/a.log 2>&1

3.当脚本频繁被调用时,想要按时间来创建日志文件时,可以加上date参数(%前要加上\)

0 1 * * * python /home/e.py >> /data2/log/dlog.`date +\%Y\%m\%d`

 

以上~

转载于:https://my.oschina.net/lonelycode/blog/1527691

你可能感兴趣的:(python,操作系统)