我正在开发的 bash 脚本中的一个进程经常会悄悄失败(它继续运行而没有错误代码,但它会将错误写入其日志文件中)。
一旦错误出现在日志文件中,我希望重新启动该过程(并继续监视日志文件)。当该过程完成时,我希望运行脚本的其余部分。
我搜索了很多次,也尝试了很多方法,包括 grep 和 tail,if、while、管道等,但我就是无法让它工作。
正确的方法是什么?
这是我基本上想要的一种虚构语言(不是 bash/shell):
:START
RUN error_prone_process
IF "Error text" ~/logfile.txt
KILL error_prone_process
GOTO START
答案1
您的“If”命令正在检查“错误文本”字样是否确实是日志文件?虽然不完全确定那里的尝试...我会使用正则表达式:
if grep -x 'ErrorText' "$File"; then
KILL error_prone_process
GOTO START
fi
答案2
如果您有权访问系统配置,请考虑使用监控。为了监控日志,我让 monit 执行一个脚本,该脚本将检查日志并在另一个文件中写入 OK 或 ERROR。然后我检查该文件的文件长度和新鲜度。