Monitoring

文件一段時間沒有被修改,如何重啟systemd服務?

  • January 21, 2018

我的設置有一個 systemd 服務,應該定期寫入文件。我想監控文件的變化,所以當它有一段時間沒有被修改時,我知道服務已經出錯了。我希望能夠在發生這種情況時自動重新啟動服務。

我曾嘗試使用路徑單元文件,但它只能在監視文件更改時啟動命令,反之則不行。

已經提出了相反的問題,當文件更改時需要重新啟動服務,但該解決方案似乎並不直接適用於我的情況。

雖然評論答案確實提出了一個很好的觀點,即在處理此類問題時應該將精力集中在哪裡(調試並嘗試確定它為什麼會掛起?),您問題的一個可能解決方案可能是設置一個systemd-timer,它會在您希望檢查該文件的任何時間間隔觸發,並讓它執行一個腳本來執行您的測試和操作。可能類似於(如果您使用 1 小時作為間隔):

定時器

[~]# cat /etc/systemd/system/checkhung.timer 
[Unit]
Description=Check if file not modified in a while and restart service

[Timer]
OnActiveSec=60min
OnUnitActiveSec=60min

服務

[~]# cat /etc/systemd/system/checkhung.service 
[Unit]
Description=Check if file not modified in a while and restart service

[Service]
Type=oneshot
ExecStart=/usr/local/bin/checker.sh

腳本

[~]# cat /usr/local/bin/checker.sh
#!/bin/bash

if [[ $(find /path/to/the/file.txt -mmin +60) ]]
then
   /usr/bin/systemctl restart my-service.service
fi

請注意,我尚未對此進行測試,因此可能需要進行一些調整。

引用自:https://serverfault.com/questions/893288