Linux 中 cron 系統(tǒng)的四種替代方案
在 Linux 系統(tǒng)中有一些其他開(kāi)源項(xiàng)目可以結(jié)合或者替代 cron 系統(tǒng)使用。
Linux cron 系統(tǒng) 是一項(xiàng)經(jīng)過(guò)時(shí)間檢驗(yàn)的成熟技術(shù),然而在任何情況下它都是最合適的系統(tǒng)自動(dòng)化工具嗎?答案是否定的。有一些開(kāi)源項(xiàng)目就可以用來(lái)與 cron 結(jié)合或者直接代替 cron 使用。
at 命令
cron 適用于長(zhǎng)期重復(fù)任務(wù)。如果你設(shè)置了一個(gè)工作任務(wù),它會(huì)從現(xiàn)在開(kāi)始定期運(yùn)行,直到計(jì)算機(jī)報(bào)廢為止。但有些情況下你可能只想設(shè)置一個(gè)一次性命令,以備不在計(jì)算機(jī)旁時(shí)該命令可以自動(dòng)運(yùn)行。這時(shí)你可以選擇使用 at
命令。
at
的語(yǔ)法比 cron 語(yǔ)法簡(jiǎn)單和靈活得多,并且兼具交互式和非交互式調(diào)度方法。(只要你想,你甚至可以使用 at
作業(yè)創(chuàng)建一個(gè) at
作業(yè)。)
$ echo "rsync -av /home/tux/ me@myserver:/home/tux/" | at 1:30 AM
該命令語(yǔ)法自然且易用,并且不需要用戶清理舊作業(yè),因?yàn)樗鼈円坏┻\(yùn)行后就完全被計(jì)算機(jī)遺忘了。
閱讀有關(guān) at 命令 的更多信息并開(kāi)始使用吧。
systemd
除了管理計(jì)算機(jī)上的進(jìn)程外,systemd
還可以幫你調(diào)度這些進(jìn)程。與傳統(tǒng)的 cron 作業(yè)一樣,systemd 計(jì)時(shí)器可以在指定的時(shí)間間隔觸發(fā)事件,例如 shell 腳本和命令。時(shí)間間隔可以是每月特定日期的一天一次(例如在星期一的時(shí)候觸發(fā)),或者在 09:00 到 17:00 的工作時(shí)間內(nèi)每 15 分鐘一次。
此外 systemd 里的計(jì)時(shí)器還可以做一些 cron 作業(yè)不能做的事情。
例如,計(jì)時(shí)器可以在一個(gè)事件 之后 觸發(fā)腳本或程序來(lái)運(yùn)行特定時(shí)長(zhǎng),這個(gè)事件可以是開(kāi)機(jī),可以是前置任務(wù)的完成,甚至可以是計(jì)時(shí)器本身調(diào)用的服務(wù)單元的完成!
如果你的系統(tǒng)運(yùn)行著 systemd 服務(wù),那么你的機(jī)器就已經(jīng)在技術(shù)層面上使用 systemd 計(jì)時(shí)器了。默認(rèn)計(jì)時(shí)器會(huì)執(zhí)行一些瑣碎的任務(wù),例如滾動(dòng)日志文件、更新 mlocate 數(shù)據(jù)庫(kù)、管理 DNF 數(shù)據(jù)庫(kù)等。創(chuàng)建自己的計(jì)時(shí)器很容易,具體可以參閱 David Both 的文章 使用 systemd 計(jì)時(shí)器來(lái)代替 cron。
anacron 命令
cron 專(zhuān)門(mén)用于在特定時(shí)間運(yùn)行命令,這適用于從不休眠或斷電的服務(wù)器。然而對(duì)筆記本電腦和臺(tái)式工作站而言,時(shí)常有意或無(wú)意地關(guān)機(jī)是很常見(jiàn)的。當(dāng)計(jì)算機(jī)處于關(guān)機(jī)狀態(tài)時(shí),cron 不會(huì)運(yùn)行,因此設(shè)定在這段時(shí)間內(nèi)的一些重要工作(例如備份數(shù)據(jù))也就會(huì)跳過(guò)執(zhí)行。
anacron 系統(tǒng)旨在確保作業(yè)定期運(yùn)行,而不是按計(jì)劃時(shí)間點(diǎn)運(yùn)行。這就意味著你可以將計(jì)算機(jī)關(guān)機(jī)幾天,再次啟動(dòng)時(shí)仍然靠 anacron 來(lái)運(yùn)行基本任務(wù)。anacron 與 cron 協(xié)同工作,因此嚴(yán)格來(lái)說(shuō)前者不是后者的替代品,而是一種調(diào)度任務(wù)的有效可選方案。許多系統(tǒng)管理員配置了一個(gè) cron 作業(yè)來(lái)在深夜備份遠(yuǎn)程工作者計(jì)算機(jī)上的數(shù)據(jù),結(jié)果卻發(fā)現(xiàn)該作業(yè)在過(guò)去六個(gè)月中只運(yùn)行過(guò)一次。anacron 確保重要的工作在 可執(zhí)行的時(shí)候 發(fā)生,而不是必須在安排好的 特定時(shí)間點(diǎn) 發(fā)生。
點(diǎn)擊參閱關(guān)于 使用 anacron 獲得更好的 crontab 效果 的更多內(nèi)容。
自動(dòng)化
計(jì)算機(jī)和技術(shù)旨在讓人們的生活更美好,工作更輕松。Linux 為用戶提供了許多有用的功能,以確保完成重要的操作系統(tǒng)任務(wù)。查看這些可用的功能,然后試著將這些功能用于你自己的工作任務(wù)吧。(LCTT 譯注:作者本段有些語(yǔ)焉不詳,讀者可參閱譬如 Ansible 自動(dòng)化工具安裝、配置和快速入門(mén)指南 等關(guān)于 Linux 自動(dòng)化的文章)