Shell 脚本中的节点重启

Node Restart in Shell Script

我想重新运行 节点服务器,每当文件发生变化时,但我想使用 fswatch。我将 fswatch 与 shell 脚本一起使用

nohup node server.js &

但我不能再次运行相同的脚本,因为它会抛出 EADDRINUSE。

我能想到的是从ps获取pid并用脚本杀死它,但我想应该有更好的解决方案。

EADDRINUSE 出现是因为您已经绑定在同一个端口上。 Node.js 没有内置的重启机制,所以是的,您应该使用一些 bash 脚本(或框架)来很好地重启后台应用程序

我可以在 fswatch 的帮助下做到这一点。

fswatch -o mydir | xargs -n1 -I{}  ps | grep '[n]ode server.js$' | awk '{system("kill ")}'

或将相同的代码放在单独的 shell 文件中。并将其用作

xargs -n1 './location-of-shell-file.sh'

当我 运行 grep 时,该过程也包含在 ps 中,因此排除我必须使用

grep '[n]ode server.js'