天天看點

如何使用 systemd 中的定時器如何使用 systemd 中的定時器

在我使用時,出現了很多問題需要我去各個地方找資料,這個過程非常麻煩。是以,我想要把我目前所做的記錄下來,友善自己的記憶,也友善讀者不必像我這樣,滿世界的找資料了。

如何使用 systemd 中的定時器如何使用 systemd 中的定時器

在我下面提到的步驟中有其他的選擇,但是這裡是最簡單的方法。在此之前,請檢視systemd.service,systemd.timer,和systemd.target的幫助頁面(man),學習你能用它們做些什麼。

<a target="_blank"></a>

假設你有一個腳本叫:/usr/local/bin/myscript ,你想要每隔一小時就運作一次。

第一步,建立一個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檔案,把它放在第一步中service檔案放置的目錄。

myscript.timer

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

現在我們假設你在相同時間想要運作多個腳本。這種情況,你需要在上面的檔案中做适當的修改。

wantedby=mytimer.target

如果在你的service 檔案中有一些依賴順序,確定你使用description字段中的值具體指定after=something.service和before=whatever.service中的參數。

另外的一種選擇是(或許更加簡單),建立一個包裝腳本來使用正确的順序來運作指令,并在你的service檔案中使用這個腳本。

你可以建立一個以上所有的腳本依賴的target檔案。

mytimer.target

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.

原文釋出時間:2014-10-12

本文來自雲栖合作夥伴“linux中國”