我正在编写一个 Bash 脚本,该脚本应该运行其他守护进程 Bash 脚本,称为 servlet。
我要查询的功能是getStatus
:
getStatus() {
servletToCheck="$@"
if [ "$(ps -aux | grep \"$(whoami)\" | grep \"${servletToCheck}\" | grep -v \"grep\" | wc -l)" -eq 0 ]; then
echo -n "Offline"
else
echo -n "Online"
fi
}
什么应该要做的是检查参数是否是用户拥有的正在运行的进程,Online
如果是则输出,Offline
否则输出。
现在,这个功能似乎可以工作了完美。问题似乎出在我的方式上解析它:
if [ "$(getStatus ${tbnServlet})" == "Online" ]; then
outSuccess "Started servlet: ${tbnServlet}"
exit 0
else
outWarning "Failed to start servlet: ${tbnServlet}"
exit 3
fi
奇怪的是,即使 servlet 已启动并正在运行,它也会这样说Failed to start/stop servlet
,并且运行一个列出 servlet 的函数会将所有 servlet 列为离线状态,即使它们并未离线。
这是什么问题,我该如何纠正?
答案1
您的代码对于这项基本工作来说太复杂了......
pgrep -u $USER "$tbnServlet" >/dev/null && echo "Started servlet: $tbnServlet" || echo "Failed to start servlet: $tbnServlet"