当某个文本输出出现在 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,但是每次脚本运行时,它都会重新启动服务文件,而不管包含所需正则表达式的行如何。
这样的脚本是:
你会做这样的事情:
journalctl
获取系统日志的输出。-f
使用跟随模式,以便命令坐在那里并为您提供新的日记条目。-n 0
告诉它不要给你任何以前的日记条目。输出通过管道传输到
while read line
. 这无休止地从 的输出流中读取journalctl
,将每一行放入 shell 变量line
中。=~
是 Bash 的正则表达式运算符。在这里,它只是检查该行是否包含plexdrive
以及之后的某个位置Could not update/save object
。如果表示的正则表达式regex
匹配,则运行该行systemctl restart PLEX_SERVICE
他是上面脚本的一个稍微改进的版本,我很喜欢用它来捕捉 JVM OOM 错误。通过 shellcheck 验证。