如何使用 systemd 中的定時器
在我下面提到的步驟中有其他的選擇,但是這裡是最簡單的方法。在此之前,請查看systemd.service, systemd.timer,和systemd.target的幫助頁面(man),學習你能用它們做些什麼。
運行一個簡單的腳本
假設你有一個腳本叫:/usr/local/bin/myscript ,你想要每隔一小時就運行一次。
Service 文件
第一步,創建一個service文件,根據你Linux的發行版本放到相應的系統目錄(在Arch中,這個目錄是/etc/systemd/system/ 或 /usr/lib/systemd/system)
myscript.service
[Unit]
Description=MyScript
[Service]
Type=simple
ExecStart=/usr/local/bin/myscript
注意,務必將Type變數的值設置為"simple"而不是"oneshot"。使用"oneshot"使得腳本只在第一次運行,之後系統會認為你不想再次運行它,從而關掉我們接下去創建的定時器(Timer)。
Timer 文件
第二步,創建一個timer文件,把它放在第一步中service文件放置的目錄。
myscript.timer
[Unit]
Description=Runs myscript every hour
[Timer]
# 首次運行要在啟動後10分鐘後
OnBootSec=10min
# 每次運行間隔時間
OnUnitActiveSec=1h
Unit=myscript.service
[Install]
WantedBy=multi-user.target
授權 / 運行
授權並運行的是timer文件,而不是service文件。
# 以 root 身份啟動定時器
systemctl start myscript.timer
# 在系統引導起來後就啟用該定時器
systemctl enable myscript.timer
在同一個Timer上運行多個腳本
現在我們假設你在相同時間想要運行多個腳本。這種情況,你需要在上面的文件中做適當的修改。
Service 文件
像我之前說過的那樣創建你的service文件來運行你的腳本,但是在每個service 文件最後都要包含下面的內容:
[Install]
WantedBy=mytimer.target
如果在你的service 文件中有一些依賴順序,確保你使用Description欄位中的值具體指定After=something.service和Before=whatever.service中的參數。
另外的一種選擇是(或許更加簡單),創建一個包裝腳本來使用正確的順序來運行命令,並在你的service文件中使用這個腳本。
Timer 文件
你只需要一個timer文件,創建mytimer.timer,像我在上面指出的。
target 文件
你可以創建一個以上所有的腳本依賴的target文件。
mytimer.target
[Unit]
Description=Mytimer
# Lots more stuff could go here, but it's situational.
# Look at systemd.unit man page.
授權 / 啟動
你需要將所有的service文件和timer文件授權。
systemctl enable script1.service
systemctl enable script2.service
...
systemctl enable mytimer.timer
systemctl start mytimer.service
Good luck.
via: http://jason.the-graham.com/2013/03/06/how-to-use-systemd-timers/
作者:Jason Graham 譯者:johnhoow 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive