強大且可靠,使用 Linux cron 命令安排任務
在我 Linux 之旅的早期,我開始欣賞操作系統(tǒng)的眾多命令行實用程序以及它們簡化常規(guī)任務的方式。例如,在我的 Windows 服務器上備份應用程序經(jīng)常需要昂貴的附加軟件包。相比之下,該tar命令使備份 Linux 相對容易,而且功能強大且可靠。
然而,在備份電子郵件系統(tǒng)時,我面臨著另一個挑戰(zhàn)。由于人們正在使用該系統(tǒng),因此無法在工作日或傍晚進行備份。備份必須在午夜之后進行,并且必須可靠。我習慣了 Windows 任務管理器,但在 Linux 上我要用什么呢?那時我才學會了 cron。
使用 cron 在 Linux 上安排任務
Cron 是一個用于自動執(zhí)行預定命令的守護進程。學習如何使用 cron 需要一些學習理解和實驗,但很快我就使用 cron 來關閉我們的電子郵件服務器,將數(shù)據(jù)備份到壓縮的 tar 文件中,然后在凌晨 3 點重新啟動電子郵件服務。
cron 作業(yè)的命令存儲在 Linux 系統(tǒng)上的 crontab 文件中,該文件通常位于 /etc/crontab 中。使用 $ crontab -l 顯示 crontab 文件的內(nèi)容。
使用$ crontab -e 編輯 crontab 文件。
linuxmi@linuxmi /home/linuxmi/www.linuxmi.com
? crontab -e
如果您以后改變主意,該如何選擇另一個編輯器?要使用的命令是select-editor。
linuxmi@linuxmi /home/linuxmi/www.linuxmi.com
? select-editor
某些系統(tǒng)默認使用Vi 編輯器進行 cron 編輯。您可以使用環(huán)境變量覆蓋此設置:
$ EDITOR=nano crontab -e
這允許您使用nano 編輯器來編輯您的個人 crontab(如果你還沒有,則會自動為您創(chuàng)建一個)。
在插入整數(shù)值之前,所有 crontab 命令都有用星號表示的參數(shù)。第一個表示分鐘,然后是小時、月中的某天、一年中的某月,最后是一周中的某天。
注釋前面有一個哈希。Cron 會忽略注釋,因此它們是一種很好的方式,可以讓您自己記下命令的作用及其重要性。
一個 cron 作業(yè)示例
假設您想在每周三凌晨 1 點使用 clamscan 掃描您的主目錄中的病毒和惡意軟件。您還想在每周五上午 5 點備份您的主目錄。使用 cron 和 crontab 文件可確保每周進行系統(tǒng)維護,無論您是否記得運行這些實用程序。
使用您自己的用戶名而不是我的用戶名“l(fā)inuxmi”編輯您的 crontab 文件以包含以下內(nèi)容:
# 掃描我的主目錄是否有病毒
0 1 * * 3 clamscan -ir /home/linuxmi/
# 備份主目錄
0 5 * * 5 tar -zcf /var/backups/home.tgz /home/linuxmi/
如果您使用的是 nano 編輯器,請使用Ctrl+O將文件寫出并使用Ctrl+X退出編輯器來保存您的工作。
提示如下,說明成功保存了。
crontab: installing new crontab
編輯文件后,使用crontab -l列出您的 cron 文件的內(nèi)容,以確保它已正確保存。
您可以為系統(tǒng)所需的任何作業(yè)創(chuàng)建 crontab 作業(yè)。這充分利用了 cron 守護進程。
使用crontab -r刪除目前的時程表
從 Linux 命令行調(diào)度
cron 最難的部分是為那些領先的星號提供正確的值,但這已經(jīng)不是什么秘密了。
時間格式如下:
t1 t2 t3 t4 t5 program
- 其中 t1 是表示分鐘,t2 表示小時,t3 表示一個月份中的第幾日,t4 表示月份,t5 表示一個星期中的第幾天。program 表示要執(zhí)行的程序。
- 當 t1 為 * 時表示每分鐘都要執(zhí)行 program,t2 為 * 時表示每小時都要執(zhí)行程序,其余類推
- 當 t1 為 a-b 時表示從第 a 分鐘到第 b 分鐘這段時間內(nèi)要執(zhí)行,t2 為 a-b 時表示從第 a 到第 b 小時都要執(zhí)行,其余類推
- 當 t1 為 */n 時表示每 n 分鐘個時間間隔執(zhí)行一次,t2 為 */n 表示每 n 小時個時間間隔執(zhí)行一次,其余類推
- 當 t1 為 a, b, c,... 時表示第 a, b, c,... 分鐘要執(zhí)行,t2 為 a, b, c,... 時表示第 a, b, c...個小時要執(zhí)行,其余類推
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期幾 (0 - 6) (星期天 為0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一個月中的第幾天 (1 - 31)
| +-------------------- 小時 (0 - 23)
+------------------------- 分鐘 (0 - 59)
使用者也可以將所有的設定先存放在文件中,用 crontab file 的方式來設定執(zhí)行時間。
此外,大多數(shù)現(xiàn)代 cron 系統(tǒng)都具有常用值的快捷方式,包括:
- @hourly : 每小時運行一次 (0 * * * *)
- @daily: 每天運行一次 (0 0 * * *)
- @weekly: 每周運行一次 (0 0 * * 0)
- @monthly: 每月運行一次 (0 0 1 * *)
- @reboot: 重啟后運行一次
還有 cron 的替代方案,包括anacron用于您希望定期運行但不根據(jù)特定計劃運行的作業(yè),以及用于一次性作業(yè)的at 命令。
Cron 是一個有用的任務調(diào)度系統(tǒng),使用起來就像編輯文本一樣簡單。試試看吧!