我正在尝试自动化Forever JS 让我的开发服务器保持运行为此,我需要检查并停止永久进程以启动另一个进程。通过跑步
sudo forever list
我得到以下输出:
信息:永远运行的进程 数据:永远的uid命令脚本PID id 日志文件正常运行时间 数据:[0] 0NQH /usr/bin/nodejs app.js 17047 17049 /home/ubuntu/.forever/0NQH.log 0:2:4:58.594
从上面的输出我需要PID这是17049当前并将其提供给下一个命令,如下所示:
sudo forever stop {{pidfromabove}}
为了实现这一点,在我的脚本中我尝试了很多东西,主要是试图找到之间的两个字符串应用程序.js和/家但由于某种原因它一直打印整行。我尝试过 sed 和 awk 的不同组合。如何从上面获取 pid 以提供给下一个stop
命令?
答案1
这看起来像是 的一个用例awk
。如果您确定输出格式稳定,以便您感兴趣的 PID 始终是该行的第 7 个元素,则这将打印 PID app.js
:
sudo forever list | awk '/app\.js/ { print $7 }'
答案2
您遇到的问题可能是因为输出位于 stderr,而不是 stdout。如果是这种情况,您可以尝试:
sudo forever list 2>&1 | sed 's/.*app.js [0-9]* \([0-9]*\) /\1/'
它应该只回答第二个 pid。
然后你可以这样做:
sudo forever stop `sudo forever list 2>&1 | sed 's/.*app.js [0-9]* \([0-9]*\) /\1/'`