应用crontab实现定时工作
crond是linux下用来周期性的执行某种工作或期待解决某些事件的一个守护过程,与windows下的打算工作相似,当装置实现操作系统后,默认会装置此服务工具,并且会主动启动crond过程,crond过程每分钟会定期检查是否有要执行的工作,如果有要执行的工作,则主动执行该工作
语法
usage: crontab [-u user] file crontab [-u user] [ -e | -l | -r ] -e (执行文字编辑器来设定时程表,内定的文字编辑器是 vi) -l (列出user的时间表) -r (删除user的时间表)
root用户的任务调度操作能够通过crontab –u root –e
来设置,也能够将调度工作间接写入/etc/crontab
文件
cron表达式
cron表达式是一个字符串,蕴含五个到七个由空格分隔的字段,示意一组工夫,通常作为执行某个程序的时间表
minute hour day month week command
minute: 示意分钟,能够是从0到59之间的任何整数
hour:示意小时,能够是从0到23之间的任何整数
day:示意日期,能够是从1到31之间的任何整数
month:示意月份,能够是从1到12之间的任何整数
week:示意星期几,能够是从0到7之间的任何整数,这里的0或7代表星期日
command:要执行的命令,能够是系统命令,也能够是本人编写的脚本文件
* * * * * command- - - - -| | | | || | | | +----- 星期中星期几 (0 - 7) (星期天 为0)| | | +---------- 月份 (1 - 12) | | +--------------- 一个月中的第几天 (1 - 31)| +-------------------- 小时 (0 - 23)+------------------------- 分钟 (0 - 59)
星号(*):代表所有可能的值,如month字段为星号,则示意每月都执行该命令操作
逗号(,):能够用逗号隔开的值指定一个列表范畴,例如,“1,2,5,7,8,9”
中杠(-):能够用整数之间的中杠示意一个整数范畴,例如“2-6”示意“2,3,4,5,6”
正斜线(/):能够用正斜线指定工夫的距离频率,例如“*/2”示意每两小时执行一次
实例
- 每一分钟执行一次 /bin/ls
* * * * * /bin/ls
- 在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次
/usr/bin/backup
0 6-12/3 * 12 * /usr/bin/backup
- 每天22:50敞开ssh服务
50 22 * * * /sbin/service sshd stop
- 在
/etc/crontab
中增加环境变量,在可执行命令之前增加命令. /etc/profile;/bin/sh
,使得环境变量失效
20 03 * * * . /etc/profile;/bin/sh test.sh
留神点
- crontab有2种编辑形式:间接编辑/etc/crontab文件与crontab –e,其中/etc/crontab里的打算工作是零碎中的打算工作,而用户的打算工作须要通过crontab –e来编辑
- crontab中的command尽量应用绝对路径,否则会常常因为门路谬误导致工作无奈执行
- 新创建的 cron 工作不会马上执行,至多要过 2 分钟后才能够,能够重启 cron 来马上执行
- %在crontab文件中示意换行,因而如果脚本或命令含有%,须要应用\%来进行本义
Mac 下应用crontab遇到的问题
我有一个Python爬虫脚本,在命令行时能够失常工作,但在crontab下报错
can't open file ... [Errno 1] Operation not permitted
cron表达式如下
30 7 * * * /usr/local/bin/python3 script.py >> script.log 2>&1
尝试了许多不同的办法,包含尝试过赋予文件权限,以root用户身份创立cron作业,不同的Python门路,都不能失常运行
最初在Stack Overflow找到解决方案
赋予cron
全磁盘拜访权限,办法如下
- 零碎偏好设置->平安和隐衷->残缺磁盘拜访
- 解除锁定以容许更改
- 单击 +
- 单击Command + Shift + G输出
/ usr / sbin
- 找到
cron
增加
参考
Linux crontab 命令
crontab用法与实例
Linux crontab命令详解
Trying to run a Python script with cron Operation not permitted