希望我的文章能幫助到你,🥰
歡迎訪問我的個人博客:codeupbetter.com,學習各種有趣的知識,
文章首更于個人博客,個人博客的排版效果更好:Ubuntu 使用 Cron 實作計劃任務,
引言:或許你正在學習如何使用 cron 來實作計劃任務,又或許你在配置 cron 任務的程序中遇到了一些問題,那么本篇文章很有可能會幫助到你,在這篇文章中,我將從以下幾個方面展開闡述,
(1)cron 是什么,對 cron 進行簡單的介紹;
(2)如何使用 cron,對 cron 的配置流程進行介紹;
(3)列出簡單的例子,幫助你快速上手,
宣告:本文所提到的方法和示例僅在 Ubuntu 18.04 上進行過測驗和使用,并未在其他系統上進行測驗,請謹慎 ) ,
1. cron 是什么
在 Windows 平臺下,我們可以利用任務計劃程式很方便的安排計劃任務,同樣在 Ubuntu 系統中也有一款類似的程式,那就是 cron,借助 cron 的幫助,我們可以在 Ubuntu 系統中很方便的設定各種計劃任務,例如定時重啟、運行計劃的備份、監視磁盤空間、定期洗掉不再需要的檔案(例如日志檔案)、運行系統維護任務、配合 supervisorctl 實作定時重啟后臺行程等等,
2. cron 的配置流程
2.1 安裝 cron 服務
- 通常 Ubuntu 下自帶 cron,如果沒有也可以通過以下命令進行安裝:
sudo apt-get install cron, - 若已經安裝,輸入以下命令判斷 cron 服務是否啟動:
pgrep cron, - 如果有 pid (一串數字)輸出則說明 cron 服務已經啟動,沒有任何輸出說明需要手動啟動 cron 服務,
2.2 啟動 cron 服務
- 啟動服務
sudo service cron start,
2.3 編輯計劃檔案
crontab -e
# 如果待執行的任務需要 root 權限,請使用下面的命令:
sudo crontab -e # 此命令相當于"sudo crontab -u root -e"
來打開你的用戶所屬的 crontab 檔案,第一次用這個命令,會讓你選擇文本編輯器,選擇你常用的編輯器即可,
2.4 重啟 cron 服務
每次保存了 crontab 之后,我們還需要重啟 cron 來應用這個計劃任務,使用命令:sudo service cron restart,
2.5 管理任務計劃檔案
cron 的所有任務計劃都記錄在 crontab 任務計劃檔案中,通過 crontab 命令對該任務檔案進行管理,
crontab 的用法如下:
usage: crontab [-u user] file
crontab [ -u user ] [ -i ] { -e | -l | -r }
(default operation is replace, per 1003.2)
-e (edit user's crontab)
-l (list user's crontab)
-r (delete user's crontab)
-i (prompt before deleting user's crontab)
下面列舉了常用的命令,
$ crontab -u root -e #編輯用戶 root 的計劃任務檔案(需要有 root 權限)
$ crontab -e #編輯當前用戶的計劃任務檔案
$ crontab -u root -l #顯示用戶 root 的計劃任務檔案(需要有 root 權限)
$ crontab -l #顯示當前用戶的計劃任務檔案
$ crontab -r #洗掉當前用戶的計劃任務檔案
2.6 cron 語法格式
# m h dom mon dow command
0-59 0-23 1-31 1-12 0-7 command
| 符號 | 含義 | 取值范圍 |
|---|---|---|
| m | 表示分鐘 | 0-59 |
| h | 表示小時 | 0-23 |
| dom | day of month,表示日期 | 1-31 |
| mon | month,表示月份 | 1-12 |
| dow | day of week,表示星期 | 0-7 |
| command | 待執行的命令 | - |
需要特殊說明的是,dow 的取值范圍為 0-7 共 8 個數,1-6 分別表示周一-周六,0 和 7 均表示周日(如果想深究原因,請參考這里),
另外需要使用一些特殊符號實作靈活的配置:
*代表所有值/代表“每”-代表范圍,分割數字
3. 案例講解
3.1 一些簡單的計劃任務
## 指定具體執行時間
2 * * * * ls #每個小時的第 2 分鐘執行一次 ls 命令
30 7 * * * ls #每天 7:30 執行一次 ls 命令
30 20 * * 2 ls #每周二,20:30執行一次 ls 命令(0 和 7 表示星期天)
## 指定間隔時間
*/2 * * * * ls #每隔 2 分鐘執行一次 ls 命令
## 指定時間段
30 7 3-6 * * ls #每個月的 3,4,5,6 號的 7:30 分各執行一次 ls 命令
## 指定多個時間
30 7 3,6 * * ls #每月的 3 號和 6 號的 7:30 分各執行一次 ls 命令
3.2 利用 crontab 定時執行 python 程式,
首先,撰寫 crontab_test.py 腳本,其內容如下:
#/usr/bin/env python3
# -*- coding: utf-8 -*-
import datetime
print(datetime.datetime.now())
接下來,在終端中運行 crontab -e,如果是首次運行該命令,請選擇常用的編輯器,然后,在最后一行輸入計劃任務,
# m h dom mon dow command
# 計劃任務說明:每分鐘執行一次 crontab_test.py 腳本,并將程式的輸出寫入到 crontab_test.log 中,
*/1 * * * * python3 ~/crontab_test.py >> ~/crontab_test.log 2>&1
在此需要說明的是,你需要指定 crontab_test.py 的路徑,我這里為了方便,將 crontab_test.py 放到了用戶目錄中,
還有一點也很重要,為方便獲取計劃任務運行失敗的原因和腳本或程式的執行結果,我們需要使用重定向功能,將這些輸出重定向到文本檔案中,例如上面的實體中,可以利用 >> ~/crontab_test.log 2>&1 將輸出的資訊都保存到 crontab_test.log 檔案中,
接下來,利用 service cron restart 重啟 cron 服務,
crontab_test.log 中的記錄如下,每分鐘都會增加一條時間記錄:
2021-02-13 22:26:01.966367
2021-02-13 22:27:01.068101
2021-02-13 22:28:01.104400
2021-02-13 22:29:01.138184
2021-02-13 22:30:01.170291
2021-02-13 22:31:01.200550
2021-02-13 22:32:01.234358
2021-02-13 22:33:01.267891
2021-02-13 22:34:01.296008
2021-02-13 22:35:01.330538
2021-02-13 22:36:01.364392
2021-02-13 22:37:01.400419
從上面的結果來看,我們設定的計劃任務達到了預期的效果,如果你照著本教程一步步來的,并且已經得到了類似上面內容的輸出結果,那么恭喜你,你現在已經初步掌握利用 crontab 設定計劃任務了,
如果你在嘗試的程序中遇到了 (CRON) info (No MTA installed, discarding output) 問題,可以利用 >> /path/xxx.log 2>&1 重定向來解決,
參考:
- Ubuntu 使用 Cron 實作計劃任務
- Ubuntu Cron定時程式
- 解決(CRON) info (No MTA installed, discarding output)
寫在最后:
如果你從這里學會了如何利用 crontab 配置計劃任務,請為我的文章點個贊!謝謝! 🚀
當然,如果文章中有錯誤,希望你能告訴我,謝謝!🤗
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/259843.html
標籤:其他
