我最近在寫一些執行備份工作的腳本,我決定使用systemd timers而不是對我而已更熟悉的cron jobs來管理它們。
在我使用時,出現了很多問題需要我去各個地方找資料,這個過程非常麻煩。因此,我想要把我目前所做的記錄下來,方便自己的記憶,也方便讀者不必像我這樣,滿世界的找資料了。
在我下面提到的步驟中有其他的選擇,但是這裡是最簡單的方法。在此之前,請查看systemd.service, systemd.timer,和systemd.target的幫助頁面(man),學習你能用它們做些什麼。
假設你有一個腳本叫:/usr/local/bin/myscript ,你想要每隔一小時就運行一次。
第一步,創建一個service文件,根據你Linux的發行版本放到相應的系統目錄(在Arch中,這個目錄是/etc/systemd/system/ 或 /usr/lib/systemd/system)
myscript.service
注意,務必將Type變量的值設置為"simple"而不是"oneshot"。使用"oneshot"使得腳本只在第一次運行,之後系統會認為你不想再次運行它,從而關掉我們接下去創建的定時器(Timer)。
第二步,創建一個timer文件,把它放在第一步中service文件放置的目錄。
myscript.timer
授權並運行的是timer文件,而不是service文件。
現在我們假設你在相同時間想要運行多個腳本。這種情況,你需要在上面的文件中做適當的修改。
像我之前說過的那樣創建你的service文件來運行你的腳本,但是在每個service 文件最後都要包含下面的內容:
如果在你的service 文件中有一些依賴順序,確保你使用Description字段中的值具體指定After=something.service和Before=whatever.service中的參數。
另外的一種選擇是(或許更加簡單),創建一個包裝腳本來使用正確的順序來運行命令,並在你的service文件中使用這個腳本。
你只需要一個timer文件,創建mytimer.timer,像我在上面指出的。
你可以創建一個以上所有的腳本依賴的target文件。
mytimer.target
你需要將所有的service文件和timer文件授權。
Good luck.
Linux 引導方式systemd upstart sysV http://www.linuxidc.com/Linux/2014-01/95555.htm
為什麼systemd會被如此迅速的采用? http://www.linuxidc.com/Linux/2014-08/105789.htm
systemd 與 sysVinit 彩版對照表 http://www.linuxidc.com/Linux/2014-09/106455.htm
Linux Systemd——在RHEL/CentOS 7中啟動/停止/重啟服務 http://www.linuxidc.com/Linux/2014-08/105975.htm
太有用了!用systemd命令來管理Linux系統! http://www.linuxidc.com/Linux/2014-09/106490.htm