如何在 shell 脚本中指定要执行的命令,如节点 bnlserver.js

How can I specify a command to execute like node bnlserver.js in a shell script

正在尝试编写 shell 脚本以作为 cron 作业运行,以确保 bnlserver.js 仍在运行,如果没有则重新启动。

我试过这个:

#!/bin/sh

# this script checks to see if the "node bnlserver.js" program is running
# and restarts it if not

ps -ef | grep bnlserver.js

if [ $? -ne 0 ]
then
    node | bnlserver.js
fi

exit

但没有用。我糟糕的 shell 脚本。我相信你们知道怎么做。 那么我该如何解决呢?感谢您的帮助。

像这样

#!/bin/sh
if ! ps -ef | grep -q "[b]nlserver[.]js"; then
    node bnlserver.js
fi

语法有点简洁,但需要确保准确性。 grep -q 命令将测试匹配,并在第一个匹配时退出。模式 "[b]nlserver[.]js" 被设计成永远不会匹配 grep 搜索本身。

这可以在 pgrep 可用的平台上提高效率。

注意:感谢 Charles Duffy 对这段代码进行了实质性改进。然而,他的帮助并不认可这种方法——他更喜欢使用 supervise、forever 或 runit。