Systemctl
根據日誌輸出關鍵字重啟服務
當某個文本輸出出現在 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,但是每次腳本執行時,它都會重新啟動服務文件,而不管包含所需正則表達式的行如何。
這樣的腳本是:
你會做這樣的事情:
#!/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