如何使用 Linux anacron 命令
在 2021 年,人們有更多的理由喜歡 Linux。在這個系列中,我將分享使用 Linux 的 21 個不同理由。自動化是使用 Linux 的最佳理由之一。
我最喜歡 Linux 的一個原因是它願意為我做工作。我不想執行重複性的任務,這些任務會佔用我的時間,或者容易出錯,或者我可能會忘記,我安排 Linux 為我做這些工作。
為自動化做準備
「自動化」這個詞既讓人望而生畏,又讓人心動。我發現用模塊化的方式來處理它是有幫助的。
1、你想實現什麼?
首先,要知道你想產生什麼結果。你是要給圖片加水印嗎?從雜亂的目錄中刪除文件?執行重要數據的備份?為自己明確定義任務,這樣你就知道自己的目標是什麼。如果有什麼任務是你發現自己每天都在做的,甚至一天一次以上,那麼它可能是自動化的候選者。
2、學習你需要的應用
將大的任務分解成小的組件,並學習如何手動但以可重複和可預測的方式產生每個結果。在 Linux 上可以做的很多事情都可以用腳本來完成,但重要的是要認識到你當前的局限性。學習如何自動調整幾張圖片的大小,以便可以方便地通過電子郵件發送,與使用機器學習為你的每周通訊生成精心製作的藝術品之間有天壤之別。有的事你可以在一個下午學會,而另一件事可能要花上幾年時間。然而,我們都必須從某個地方開始,所以只要從小做起,並時刻注意改進的方法。
3、自動化
在 Linux 上使用一個自動化工具來定期實現它。這就是本文介紹的步驟!
要想自動化一些東西,你需要一個腳本來自動化一個任務。在測試時,最好保持簡單,所以本文自動化的任務是在 /tmp
目錄下創建一個名為 hello
的文件。
#!/bin/sh
touch /tmp/hello
將這個簡單的腳本複製並粘貼到一個文本文件中,並將其命名為 example
。
Cron
每個安裝好的 Linux 系統都會有的內置自動化解決方案就是 cron 系統。Linux 用戶往往把 cron 籠統地稱為你用來安排任務的方法(通常稱為 「cron 作業」),但有多個應用程序可以提供 cron 的功能。最通用的是 cronie;它的優點是,它不會像歷史上為系統管理員設計的 cron 應用程序那樣,假設你的計算機總是開著。
驗證你的 Linux 發行版提供的是哪個 cron 系統。如果不是 cronie,你可以從發行版的軟體倉庫中安裝 cronie。如果你的發行版沒有 cronie 的軟體包,你可以使用舊的 anacron 軟體包來代替。anacron
命令是包含在 cronie 中的,所以不管你是如何獲得它的,你都要確保在你的系統上有 anacron
命令,然後再繼續。anacron 可能需要管理員 root 許可權,這取決於你的設置。
$ which anacron
/usr/sbin/anacron
anacron 的工作是確保你的自動化作業定期執行。為了做到這一點,anacron 會檢查找出最後一次運行作業的時間,然後檢查你告訴它運行作業的頻率。
假設你將 anacron 設置為每五天運行一次腳本。每次你打開電腦或從睡眠中喚醒電腦時,anacron都會掃描其日誌以確定是否需要運行作業。如果一個作業在五天或更久之前運行,那麼 anacron 就會運行該作業。
Cron 作業
許多 Linux 系統都捆綁了一些維護工作,讓 cron 來執行。我喜歡把我的工作與系統工作分開,所以我在我的主目錄中創建了一個目錄。具體來說,有一個叫做 ~/.local
的隱藏文件夾(「local」 的意思是它是為你的用戶賬戶定製的,而不是為你的「全局」計算機系統定製的),所以我創建了子目錄 etc/cron.daily
來作為 cron 在我的系統上的家目錄。你還必須創建一個 spool 目錄來跟蹤上次運行作業的時間。
$ mkdir -p ~/.local/etc/cron.daily ~/.var/spool/anacron
你可以把任何你想定期運行的腳本放到 ~/.local/etc/cron.daily
目錄中。現在把 example
腳本複製到目錄中,然後 用 chmod 命令使其可執行。
$ cp example ~/.local/etc/cron.daily
# chmod +x ~/.local/etc/cron.daily/example
接下來,設置 anacron 來運行位於 ~/.local/etc/cron.daily
目錄下的任何腳本。
anacron
默認情況下,cron 系統的大部分內容都被認為是系統管理員的領域,因為它通常用於重要的底層任務,如輪換日誌文件和更新證書。本文演示的配置是為普通用戶設置個人自動化任務而設計的。
要配置 anacron 來運行你的 cron 作業,請在 /.local/etc/anacrontab
創建一個配置文件:
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
1 0 cron.mine run-parts /home/tux/.local/etc/cron.daily/
這個文件告訴 anacron 每到新的一天(也就是每日),延遲 0 分鐘後,就運行(run-parts
)所有在 ~/.local/etc/cron.daily
中找到的可執行腳本。有時,會使用幾分鐘的延遲,這樣你的計算機就不會在你登錄後就被所有可能的任務衝擊。不過這個設置適合測試。
cron.mine
值是進程的一個任意名稱。我稱它為 cron.mine
,但你也可以稱它為 cron.personal
或 penguin
或任何你想要的名字。
驗證你的 anacrontab
文件的語法:
$ anacron -T -t ~/.local/etc/anacrontab
-S /home/tux/.var/spool/anacron
沉默意味著成功。
在 .profile 中添加 anacron
最後,你必須確保 anacron 以你的本地配置運行。因為你是以普通用戶而不是 root 用戶的身份運行 anacron,所以你必須將它引導到你的本地配置:告訴 anacron 要做什麼的 anacrontab
文件,以及幫助 anacron 跟蹤每一個作業最後一次執行是多少天的 spool 目錄:
anacron -fn -t /home/tux/.local/etc/anacrontab
-S /home/tux/.var/spool/anacron
-fn
選項告訴 anacron 忽略 時間戳,這意味著你強迫它無論如何都要運行你的 cron 作業。這完全是為了測試的目的。
測試你的 cron 作業
現在一切都設置好了,你可以測試作業了。從技術上講,你可以在不重啟的情況下進行測試,但重啟是最有意義的,因為這就是設計用來處理中斷和不規則的登錄會話的。花點時間重啟電腦、登錄,然後尋找測試文件:
$ ls /tmp/hello
/tmp/hello
假設文件存在,那麼你的示例腳本已經成功執行。現在你可以從 ~/.profile
中刪除測試選項,留下這個作為你的最終配置。
anacron -t /home/tux/.local/etc/anacrontab
-S /home/tux/.var/spool/anacron
使用 anacron
你已經配置好了你的個人自動化基礎設施,所以你可以把任何你想讓你的計算機替你管理的腳本放到 ~/.local/etc/cron.daily
目錄下,它就會按計劃運行。
這取決於你希望作業運行的頻率。示例腳本是每天執行一次。很明顯,這取決於你的計算機在任何一天是否開機和醒著。如果你在周五使用電腦,但把它設置在周末,腳本就不會在周六和周日運行。然而,在周一,腳本會執行,因為 anacron 會知道至少有一天已經過去了。你可以在 ~/.local/etc
中添加每周、每兩周、甚至每月的目錄,以安排各種各樣的間隔。
要添加一個新的時間間隔:
- 在
~/.local/etc
中添加一個目錄(例如cron.weekly
)。 - 在
~/.local/etc/anacrontab
中添加一行,以便在新目錄下運行腳本。對於每周一次的間隔,其配置如下。7 0 cron.mine run-parts /home/tux/.local/etc/cron.weekly/
(0
的值可以選擇一些分鐘數,以適當地延遲腳本的啟動)。 - 把你的腳本放在
cron.weekly
目錄下。
歡迎來到自動化的生活方式。它不會讓人感覺到,但你將會變得更有效率。
via: https://opensource.com/article/21/2/linux-automation
作者:Seth Kenlon 選題:lujun9972 譯者:wxy 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive