Linux下新增定時任務

weixin_34138377發表於2017-11-30

很多時候需要程式碼定時定點去執行,比如說寫了一段爬取網站資訊的程式碼,想每天早上進行一次爬取,就需要為系統新增計劃任務。而在Linux系統下,系統計劃任務可以通過crond來實現。那麼crond是什麼呢,以下摘錄自網路:

crond的概念和crontab是不可分割的。crontab是一個命令,常見於Unix和類Unix的作業系統之中,用於設定週期性被執行的指令。該命令從標準輸入裝置讀取指令,並將其存放於“crontab”檔案中,以供之後讀取和執行。來自:百度百科

Crond服務會定期(預設每分鐘檢查一次)檢查系統中是否有要執行的任務工作。如果有,便會根據其預先設定的定時任務規則自動執行該定時任務工作。這個Crond定時任務服務就相當於我們早上使用的鬧鐘一樣。來自:Linux公社

說白了就是,我們可以通過自己編寫定時規則來實現一些定時任務

下面先介紹一下crond的基本命令:

crond status:檢視crond服務狀態
crond start:啟動crond服務
crond stop:關閉crond服務
crond restart:重啟crond服務
crontab -u:設定某個使用者的crond服務
crontab -l:列出某個使用者的crond內容
crontab -r:刪除某個使用者的crond服務
crontab -e:編輯某個使用者的crond服務內容
*有時在啟動crond時會出現crond: can't lock /var/run/crond.pid, otherpid may be 15340: Resource temporarily unavailable的提示,只需用killall crond結束所有crond服務再重新啟動即可

接下來是crond編寫格式:

2321566-3d26dbe4d6ad53c9.png
crond格式

在以上各個欄位中,還可以使用以下特殊字元:
星號(*):代表所有可能的值,例如month欄位如果是星號,則表示在滿足其它欄位的制約條件後每月都執行該命令操作。
逗號(,):可以用逗號隔開的值指定一個列表範圍,例如,“1,2,5,7,8,9”
中槓(-):可以用整數之間的中槓表示一個整數範圍,例如“2-6”表示“2,3,4,5,6”
正斜線(/):可以用正斜線指定時間的間隔頻率,例如“0-23/2”表示每兩小時執行一次。同時正斜線可以和星號一起使用,例如*/10,如果用在minute欄位,表示每十分鐘執行一次。來自:CSDN

比如:
0 1 * * * /bin/echo 'test' > /home/test.log
表示每天01:00列印字串‘hello world!’到/home/test.log檔案中
又比如:
*/5 * * * * /home/test.sh
表示每隔5分鐘執行/home/test.sh指令碼
再比如:
0 1,2 * * 3 /home/test.sh
表示每週3的01:00和02:00分別執行一次/home/test.sh指令碼

crond定時任務新增規範:

  1. 新增註釋
  2. 定時任務最好以指令碼(.sh)的形式執行
  3. 執行shell指令碼任務前加/bin/sh
  4. 所有路徑都要寫全路徑(包括應用程式的路徑),比如要定時執行python程
    序,執行命令不能簡單寫作python ***.py,python程式的完整路徑也要寫
  5. 編寫執行指令碼要注意不要和window混用,要在純linux環境下編寫,否則會
    因平臺儲存檔案格式不同出現-bash: ./***.sh: /bin/bash^M: bad interpreter: No such file or directory的錯誤
  6. 編寫好的執行指令碼最好先在命令列驗證一下,在新增進計劃任務中
  7. 定時任務命令或指令碼結尾加>/dev/null 2>&1

完整的計劃任務例項:

crond新增定時任務
0 1 * * * /home/test.sh
test.sh: #遇到許可權問題執行 chmod u+x test.sh

#!/bin/sh
/usr/bin/python /home/test.py > /dev/null 2>&1

相關文章