共计 1818 个字符,预计需要花费 5 分钟才能阅读完成。
应用 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