強(qiáng)大且可靠,使用 Linux cron 命令安排任務(wù)

在我 Linux 之旅的早期,我開始欣賞操作系統(tǒng)的眾多命令行實(shí)用程序以及它們簡(jiǎn)化常規(guī)任務(wù)的方式。例如,在我的 Windows 服務(wù)器上備份應(yīng)用程序經(jīng)常需要昂貴的附加軟件包。相比之下,該tar命令使備份 Linux 相對(duì)容易,而且功能強(qiáng)大且可靠。
然而,在備份電子郵件系統(tǒng)時(shí),我面臨著另一個(gè)挑戰(zhàn)。由于人們正在使用該系統(tǒng),因此無(wú)法在工作日或傍晚進(jìn)行備份。備份必須在午夜之后進(jìn)行,并且必須可靠。我習(xí)慣了 Windows 任務(wù)管理器,但在 Linux 上我要用什么呢?那時(shí)我才學(xué)會(huì)了 cron。
使用 cron 在 Linux 上安排任務(wù)
Cron 是一個(gè)用于自動(dòng)執(zhí)行預(yù)定命令的守護(hù)進(jìn)程。學(xué)習(xí)如何使用 cron 需要一些學(xué)習(xí)理解和實(shí)驗(yàn),但很快我就使用 cron 來(lái)關(guān)閉我們的電子郵件服務(wù)器,將數(shù)據(jù)備份到壓縮的 tar 文件中,然后在凌晨 3 點(diǎn)重新啟動(dòng)電子郵件服務(wù)。
cron 作業(yè)的命令存儲(chǔ)在 Linux 系統(tǒng)上的 crontab 文件中,該文件通常位于 /etc/crontab 中。使用 $ crontab -l 顯示 crontab 文件的內(nèi)容。
使用$ crontab -e 編輯 crontab 文件。
linuxmi@linuxmi /home/linuxmi/www.linuxmi.com
? crontab -e

如果您以后改變主意,該如何選擇另一個(gè)編輯器?要使用的命令是select-editor。
linuxmi@linuxmi /home/linuxmi/www.linuxmi.com
? select-editor

某些系統(tǒng)默認(rèn)使用Vi 編輯器進(jìn)行 cron 編輯。您可以使用環(huán)境變量覆蓋此設(shè)置:
$ EDITOR=nano crontab -e
這允許您使用nano 編輯器來(lái)編輯您的個(gè)人 crontab(如果你還沒有,則會(huì)自動(dòng)為您創(chuàng)建一個(gè))。
在插入整數(shù)值之前,所有 crontab 命令都有用星號(hào)表示的參數(shù)。第一個(gè)表示分鐘,然后是小時(shí)、月中的某天、一年中的某月,最后是一周中的某天。
注釋前面有一個(gè)哈希。Cron 會(huì)忽略注釋,因此它們是一種很好的方式,可以讓您自己記下命令的作用及其重要性。
一個(gè) cron 作業(yè)示例
假設(shè)您想在每周三凌晨 1 點(diǎn)使用 clamscan 掃描您的主目錄中的病毒和惡意軟件。您還想在每周五上午 5 點(diǎn)備份您的主目錄。使用 cron 和 crontab 文件可確保每周進(jìn)行系統(tǒng)維護(hù),無(wú)論您是否記得運(yùn)行這些實(shí)用程序。
使用您自己的用戶名而不是我的用戶名“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 編輯器,請(qǐng)使用Ctrl+O將文件寫出并使用Ctrl+X退出編輯器來(lái)保存您的工作。
提示如下,說(shuō)明成功保存了。
crontab: installing new crontab

編輯文件后,使用crontab -l列出您的 cron 文件的內(nèi)容,以確保它已正確保存。
您可以為系統(tǒng)所需的任何作業(yè)創(chuàng)建 crontab 作業(yè)。這充分利用了 cron 守護(hù)進(jìn)程。
使用crontab -r刪除目前的時(shí)程表

從 Linux 命令行調(diào)度
cron 最難的部分是為那些領(lǐng)先的星號(hào)提供正確的值,但這已經(jīng)不是什么秘密了。
時(shí)間格式如下:
t1 t2 t3 t4 t5 program
- 其中 t1 是表示分鐘,t2 表示小時(shí),t3 表示一個(gè)月份中的第幾日,t4 表示月份,t5 表示一個(gè)星期中的第幾天。program 表示要執(zhí)行的程序。
 - 當(dāng) t1 為 * 時(shí)表示每分鐘都要執(zhí)行 program,t2 為 * 時(shí)表示每小時(shí)都要執(zhí)行程序,其余類推
 - 當(dāng) t1 為 a-b 時(shí)表示從第 a 分鐘到第 b 分鐘這段時(shí)間內(nèi)要執(zhí)行,t2 為 a-b 時(shí)表示從第 a 到第 b 小時(shí)都要執(zhí)行,其余類推
 - 當(dāng) t1 為 */n 時(shí)表示每 n 分鐘個(gè)時(shí)間間隔執(zhí)行一次,t2 為 */n 表示每 n 小時(shí)個(gè)時(shí)間間隔執(zhí)行一次,其余類推
 - 當(dāng) t1 為 a, b, c,... 時(shí)表示第 a, b, c,... 分鐘要執(zhí)行,t2 為 a, b, c,... 時(shí)表示第 a, b, c...個(gè)小時(shí)要執(zhí)行,其余類推
 
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期幾 (0 - 6) (星期天 為0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一個(gè)月中的第幾天 (1 - 31)
| +-------------------- 小時(shí) (0 - 23)
+------------------------- 分鐘 (0 - 59)
使用者也可以將所有的設(shè)定先存放在文件中,用 crontab file 的方式來(lái)設(shè)定執(zhí)行時(shí)間。
此外,大多數(shù)現(xiàn)代 cron 系統(tǒng)都具有常用值的快捷方式,包括:
- @hourly : 每小時(shí)運(yùn)行一次 (0 * * * *)
 - @daily: 每天運(yùn)行一次 (0 0 * * *)
 - @weekly: 每周運(yùn)行一次 (0 0 * * 0)
 - @monthly: 每月運(yùn)行一次 (0 0 1 * *)
 - @reboot: 重啟后運(yùn)行一次
 
還有 cron 的替代方案,包括anacron用于您希望定期運(yùn)行但不根據(jù)特定計(jì)劃運(yùn)行的作業(yè),以及用于一次性作業(yè)的at 命令。
Cron 是一個(gè)有用的任務(wù)調(diào)度系統(tǒng),使用起來(lái)就像編輯文本一樣簡(jiǎn)單。試試看吧!















 
 
 








 
 
 
 