有人可以告诉我为什么这有时会失败:
if [ $(pgrep -f agent.jar | wc -l) -gt 1 ]; then
kill $(pgrep -f agent.jar | grep -v $(pgrep -of agent.jar) | sort -n | uniq | awk '{printf $1" "}');
fi
这部分代码的目标是:
检查是否存在重复的进程。请注意我如何引用.jar文件而不是java incase正在运行其他java应用程序
如果检测到重复项,它会获取最新重复项的进程ID(即遗漏原始项)并尝试终止重复项。
代码效果很好。它检测到重复并杀死它们,但有时它会获取第三个进程(可能是grep pid或ps pid)并试图杀死它。我不知道它的发现是什么随机PID。它唯一的暂时性,这就是为什么我猜测它的部分杀线。
以下是错误示例
/start.sh: line 15: [: 3183: binary operator expected
这最终会把这个错误抛给看起来很糟糕的终端。有可能忽略它,因为它本来可以做它的工作,但是这将是草率的,并且有可能出现一些其他条件破坏脚本,所以理想情况下我需要修复它。
感谢您的帮助
答案 0 :(得分:0)
它失败(有时),因为在最糟糕的情况下你得到3个不同的pid列表。查询一次pgrep-list并再次使用ps -p
检查pid。