歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 如何使用 systemd 中的定時器

如何使用 systemd 中的定時器

日期:2017/2/28 14:27:12   编辑:Linux教程

我最近在寫一些執行備份工作的腳本,我決定使用systemd timers而不是對我而已更熟悉的cron jobs來管理它們。

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

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

運行一個簡單的腳本

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

Service 文件

第一步,創建一個service文件,根據你Linux的發行版本放到相應的系統目錄(在Arch中,這個目錄是/etc/systemd/system//usr/lib/systemd/system)

myscript.service

  1. [Unit]
  2. Description=MyScript
  3. [Service]
  4. Type=simple
  5. ExecStart=/usr/local/bin/myscript

注意,務必將Type變量的值設置為"simple"而不是"oneshot"。使用"oneshot"使得腳本只在第一次運行,之後系統會認為你不想再次運行它,從而關掉我們接下去創建的定時器(Timer)。

Timer 文件

第二步,創建一個timer文件,把它放在第一步中service文件放置的目錄。

myscript.timer

  1. [Unit]
  2. Description=Runs myscript every hour
  3. [Timer]
  4. # 首次運行要在啟動後10分鐘後
  5. OnBootSec=10min
  6. # 每次運行間隔時間
  7. OnUnitActiveSec=1h
  8. Unit=myscript.service
  9. [Install]
  10. WantedBy=multi-user.target

授權 / 運行

授權並運行的是timer文件,而不是service文件。

  1. # 以 root 身份啟動定時器
  2. systemctl start myscript.timer
  3. # 在系統引導起來後就啟用該定時器
  4. systemctl enable myscript.timer

在同一個Timer上運行多個腳本

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

Service 文件

像我之前說過的那樣創建你的service文件來運行你的腳本,但是在每個service 文件最後都要包含下面的內容:

  1. [Install]
  2. WantedBy=mytimer.target

如果在你的service 文件中有一些依賴順序,確保你使用Description字段中的值具體指定After=something.serviceBefore=whatever.service中的參數。

另外的一種選擇是(或許更加簡單),創建一個包裝腳本來使用正確的順序來運行命令,並在你的service文件中使用這個腳本。

Timer 文件

你只需要一個timer文件,創建mytimer.timer,像我在上面指出的。

target 文件

你可以創建一個以上所有的腳本依賴的target文件。

mytimer.target

  1. [Unit]
  2. Description=Mytimer
  3. # Lots more stuff could go here, but it's situational.
  4. # Look at systemd.unit man page.

授權 / 啟動

你需要將所有的service文件和timer文件授權。

  1. systemctl enable script1.service
  2. systemctl enable script2.service
  3. ...
  4. systemctl enable mytimer.timer
  5. systemctl start mytimer.service

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

Copyright © Linux教程網 All Rights Reserved