发生了一些奇怪的行为,这让我认为可能发生了一些事情......
所以我有一个由 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 block 吗?节点是启动后启动的进程。当由 cron 运行时或当我使用 SSH 时由我运行时,shell 脚本都无法正常工作。
我是否遗漏了一些基本的东西?
TIA
尼科
最佳答案
除非您正在运行 BSD ps
,否则您应该能够使用 -C
标志或 pgrep
-C cmdlist Select by command name. This selects the processes whose executable
name is given in cmdlist.
例如,
if ps -C node > /dev/null
then
date > /etc/nodeCheck.log
else
date > /dev/null
fi
或
if pgrep node > /dev/null
then
date > /etc/nodeCheck.log
else
date > /dev/null
fi
关于linux - 用于检查进程是否正在运行的 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24501458/