Linux基礎 - Crontab定時任務

在Linux上,通過crontab 命令,我們可以在固定的間隔時間執行指定的系統指令或 shell script腳本。時間間隔的單位可以是分鐘、小時、日、月、周及以上的任意組合。這個命令非常適合週期性的日誌分析或數據備份等工作。

設置Cron任務

創建任務

可以通過如下指令來創建或者修改你自己的crontab文件,

crontab -e

設置運行週期

cron job是週期性運行的,我們按如下格式來進行設置,

* * * * * command to be executed
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)

當然有更簡單的方法,你可以在 https://crontab.guru/ 網站進行在線設置,設置好了直接拷貝過來。網頁提供了圖形化的操作界面,對新手特別友好。

Screen Shot 2019-11-22 at 10.20.04 PM.png

配置命令

直接在運行週期後面輸入想要運行的任務即可。

這樣就配置好了,最好是設置一個最近的時間進行測試,測試正常後就可以換到真實的週期了。

注意到編輯命令的時候,可能使用到nano編輯器,記住保存的快捷鍵是Ctrl+X,保存好了直接退出,cron任務會自動安裝好,不需要額外的重啓操作。

常見問題

如何列出所有的Cron任務

可以使用-l參數列出crontab文件:

$ crontab -l
0 15 30 45 18-06 * * * /bin/echo `date` > dev/tty1

如何查看Cron任務運行log

可以在系統log中進行查找,

tail -f /var/log/syslog | grep CRON

如何配置帶有虛擬venv的Python腳本

在Python開發過程中,可能使用virtualenv進行環境的配置,來隔離真實環境,防止污染。在這種情況下,如果想成功在Cron Job中運行開發好的Python腳本,推薦使用shell腳本的方式,將運行的腳本進行封裝,如下例子所示:

#! /bin/bash    
cd my/virtual/env/root/dir
source bin/activate

# virtualenv is now active, which means your PATH has been modified.
# Don't try to run python from /usr/bin/python, just run "python" and
# let the PATH figure out which version to run (based on what your
# virtualenv has configured).

python myScript.py

保存好以後,比如爲myShell.sh, 使用chmod指令賦予可執行權限即可,

chmod a+x myShell.sh

最後將shell腳本放在cron配置中即可,

1 * * * * /path/to/your/shell/script/myShell.sh

如何在Cron 任務中發送郵件通知

第一步,設置郵件地址、端口等信息:

https://www.nixtutor.com/linux/send-mail-with-gmail-and-ssmtp/

第二步,在Cron任務中加上發送郵件的指令,

1 * * * * script.sh | mail -s "Subject of Mail" [email protected]

參考鏈接:

  • https://stackoverflow.com/questions/4150671/how-to-set-virtualenv-for-a-crontab/12848443
  • https://www.nixtutor.com/linux/sending-email-alerts-through-cron/

在Linux上,通過crontab 命令,我們可以在固定的間隔時間執行指定的系統指令或 shell script腳本。時間間隔的單位可以是分鐘、小時、日、月、周及以上的任意組合。這個命令非常適合週期性的日誌分析或數據備份等工作。

設置Cron任務

創建任務

可以通過如下指令來創建或者修改你自己的crontab文件,

crontab -e

設置運行週期

cron job是週期性運行的,我們按如下格式來進行設置,

* * * * * command to be executed
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)

當然有更簡單的方法,你可以在 https://crontab.guru/ 網站進行在線設置,設置好了直接拷貝過來。網頁提供了圖形化的操作界面,對新手特別友好。

Screen Shot 2019-11-22 at 10.20.04 PM.png

配置命令

直接在運行週期後面輸入想要運行的任務即可。

這樣就配置好了,最好是設置一個最近的時間進行測試,測試正常後就可以換到真實的週期了。

注意到編輯命令的時候,可能使用到nano編輯器,記住保存的快捷鍵是Ctrl+X,保存好了直接退出,cron任務會自動安裝好,不需要額外的重啓操作。

常見問題

如何列出所有的Cron任務

可以使用-l參數列出crontab文件:

$ crontab -l
0 15 30 45 18-06 * * * /bin/echo `date` > dev/tty1

如何查看Cron任務運行log

可以在系統log中進行查找,

tail -f /var/log/syslog | grep CRON

如何配置帶有虛擬venv的Python腳本

在Python開發過程中,可能使用virtualenv進行環境的配置,來隔離真實環境,防止污染。在這種情況下,如果想成功在Cron Job中運行開發好的Python腳本,推薦使用shell腳本的方式,將運行的腳本進行封裝,如下例子所示:

#! /bin/bash    
cd my/virtual/env/root/dir
source bin/activate

# virtualenv is now active, which means your PATH has been modified.
# Don't try to run python from /usr/bin/python, just run "python" and
# let the PATH figure out which version to run (based on what your
# virtualenv has configured).

python myScript.py

保存好以後,比如爲myShell.sh, 使用chmod指令賦予可執行權限即可,

chmod a+x myShell.sh

最後將shell腳本放在cron配置中即可,

1 * * * * /path/to/your/shell/script/myShell.sh

如何在Cron 任務中發送郵件通知

第一步,設置郵件地址、端口等信息:

https://www.nixtutor.com/linux/send-mail-with-gmail-and-ssmtp/

第二步,在Cron任務中加上發送郵件的指令,

1 * * * * script.sh | mail -s "Subject of Mail" [email protected]

參考鏈接:

  • https://stackoverflow.com/questions/4150671/how-to-set-virtualenv-for-a-crontab/12848443
  • https://www.nixtutor.com/linux/sending-email-alerts-through-cron/

本文由『後端精進之路』原創,首發於博客 http://teckee.github.io/ , 轉載請註明出處

搜索『後端精進之路』關注公衆號,立刻獲取最新文章和價值2000元的BATJ精品面試課程

後端精進之路.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章