使用crontab完成定時任務

使用crontab完成定時任務

crond是linux下用來週期性的執行某種任務或等待處理某些事件的一個守護進程,與windows下的計劃任務相似,當安裝完成操做系統後,默認會安裝此服務工具,而且會自動啓動crond進程,crond進程每分鐘會按期檢查是否有要執行的任務,若是有要執行的任務,則自動執行該任務html

語法

usage:  crontab [-u user] file
        crontab [-u user] [ -e | -l | -r ]
        -e      (執行文字編輯器來設定時程表,內定的文字編輯器是 vi)
        -l      (列出user的時間表)
        -r      (刪除user的時間表)

root用戶的任務調度操做能夠經過crontab –u root –e來設置,也能夠將調度任務直接寫入/etc/crontab文件python

cron表達式

cron表達式是一個字符串,包含五個到七個由空格分隔的字段,表示一組時間,一般做爲執行某個程序的時間表linux

minute hour day month week commandwindows

minute: 表示分鐘,能夠是從0到59之間的任何整數安全

hour:表示小時,能夠是從0到23之間的任何整數bash

day:表示日期,能夠是從1到31之間的任何整數ssh

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

相關文章
相關標籤/搜索