Linux中國

如何使用 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.serviceBefore=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

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國