【发布时间】:2014-08-21 11:50:44
【问题描述】:
发生了一些奇怪的行为,让我认为可能发生了什么事......
所以我有一个由 cron 执行的 shell 脚本。基本上它是为了检查 Node.js 是否正在运行。如果是,请记录日期...如果不是,则不记录任何内容!在我构建它的时候,我对其进行了测试,发现它在节点脚本运行时记录下来,而在它停止运行时没有记录......
最近我知道 Node 宕机了,我认为这是检查脚本是否完成了它应该做的事情的绝佳机会。它没有!而且它没有... :(
这是脚本:
#!/bin/bash
if ps -Al | grep -v grep | grep -q node
then
date > /etc/nodeCheck.log
else
date > /dev/null
fi
此 .sh 的权限正确,使用的路径存在,正在运行
$ps -A | grep -v grep | grep -q node
什么都不返回,
$echo $?
1
所以它不应该去 else 块吗? node 是启动后启动的进程。当我通过 SSH 运行时,无论是由 cron 运行还是由我运行,shell 脚本都无法正常工作。
我在这里遗漏了一些基本的东西吗?
TIA
尼可
【问题讨论】:
-
仅供参考,您可以将两个
greps 合并为grep -q '[n]ode'。 -
尝试删除
-q。如果它匹配任何内容,它将显示它,cron会将输出邮寄给您。 -
你可以检查
ps -A的输出,如果它确实显示了所有用户的进程。如果不是,则问题在您的进程ps的权限范围内。 -
@konsolebox 如何查看ps的权限范围?我可以告诉你,当我在
ps中进行 SSH 时,不会显示启动后由 rc.local 启动的节点进程,但ps -A会显示它 -
您实际上可能过快地杀死和检查您的节点。尝试在它们之间插入睡眠。一些进程会在退出前捕获 SIGTERM 信号并进行清理。