关于linux:使用crontab完成定时任务

49次阅读

共计 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”示意每两小时执行一次

实例

  1. 每一分钟执行一次 /bin/ls
   * * * * * /bin/ls
  1. 在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup
0 6-12/3 * 12 * /usr/bin/backup
  1. 每天 22:50 敞开 ssh 服务
50 22 * * * /sbin/service sshd stop
  1. /etc/crontab 中增加环境变量,在可执行命令之前增加命令 . /etc/profile;/bin/sh,使得环境变量失效
20 03 * * * . /etc/profile;/bin/sh test.sh

留神点

  1. crontab 有 2 种编辑形式:间接编辑 /etc/crontab 文件与 crontab –e,其中 /etc/crontab 里的打算工作是零碎中的打算工作,而用户的打算工作须要通过 crontab –e 来编辑
  2. crontab 中的 command 尽量应用绝对路径,否则会常常因为门路谬误导致工作无奈执行
  3. 新创建的 cron 工作不会马上执行,至多要过 2 分钟后才能够,能够重启 cron 来马上执行
  4. % 在 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 全磁盘拜访权限,办法如下

  1. 零碎偏好设置 -> 平安和隐衷 -> 残缺磁盘拜访
  2. 解除锁定以容许更改
  3. 单击 +
  4. 单击 Command + Shift + G 输出/ usr / sbin
  5. 找到cron 增加

参考

Linux crontab 命令

crontab 用法与实例

Linux crontab 命令详解

Trying to run a Python script with cron Operation not permitted

正文完
 0