Systemctl

根據日誌輸出關鍵字重啟服務

  • March 12, 2021

當某個文本輸出出現在 systemctl 狀態或日誌文件中時,我試圖讓服務重新啟動。

此範例中的完整行是:

Aug 27 01:05:16 SSD plexdrive410[1321]: [USR/LOCAL/BIN/PLEXDRIVE410] [2018-08-27 01:05] WARNING: Could not update/save object 4PASA4U3Gj8mTvllAAIgEqHdMFHER3q (screens.jpg)

關鍵字將始終包含

WARNING: Could not update/save object

我曾嘗試尋找答案,但無法找到答案,感謝任何指點!




我嘗試使用的更新腳本:

感謝您的撰寫和解釋。第一次它會重複重新啟動 SERVICE。

然後我添加了 sleep 30,但是每次腳本執行時,它都會重新啟動服務文件,而不管包含所需正則表達式的行如何。

這樣的腳本是:

https://pastebin.com/Vd4bF18c

你會做這樣的事情:

#!/bin/bash

regex="plexdrive.*Could not update\/save object"

journalctl -f -n 0 |
while read line
do
   if [[ "$line" =~ $regex ]]; then
       systemctl restart PLEX_SERVICE
   fi
done

journalctl獲取系統日誌的輸出。-f使用跟隨模式,以便命令坐在那裡並為您提供新的日記條目。-n 0告訴它不要給你任何以前的日記條目。

輸出通過管道傳輸到while read line. 這無休止地從 的輸出流中讀取journalctl,將每一行放入 shell 變數line中。

=~是 Bash 的正則表達式運算符。在這裡,它只是檢查該行是否包含plexdrive以及之後的某個位置Could not update/save object。如果表示的正則表達式regex匹配,則執行該行systemctl restart PLEX_SERVICE

引用自:https://unix.stackexchange.com/questions/464979