我正在尝试使用 bash 脚本(名为 starter.sh)在系统重新启动时永久执行.js以检查我的应用程序是否正在运行:
#!/bin/sh
if [ $(ps -e -o uid,cmd | grep $UID | grep node | grep -v grep | wc -l | tr -s "n") -eq 0 ]
then
export PATH=/usr/local/bin:$PATH
forever start --sourceDir ~/var/www/mysite app.js >> ~/var/www/mysite/log.txt 2>&1
fi
然后,我将以下代码附加到crontab:
@reboot ~/var/www/mysite/starter.sh
但是重新启动系统(sudo 重新启动)后.js永远无法启动。在日志文件中,我收到以下消息:
/root/var/www/mysite/starter.sh: 6:
/root/var/www/mysite/starter.sh: forever: not found
知道吗?
附言如果我从命令行调用 Forever(永远开始 --sourceDir ~/var/www/mysite app.js)都可以正常工作。
upstart
的东西,以便在重新启动时启动/停止节点脚本。这篇文章详细介绍了如何做你所追求的事情,你可以根据自己的需要简化设置:
https://www.exratione.com/2013/02/nodejs-and-forever-as-a-service-simple-upstart-and-init-scripts-for-ubuntu/
但是,如果您没有运行 ubuntu 或类似版本,则每个环境都有自己的启动/停止服务类型。在 Mac OS X 上,您可以改用launchd
。 launchd
有很多功能,但希望这篇文章可以指导您朝着正确的方向前进:
http://paul.annesley.cc/2012/09/mac-os-x-launchd-is-cool/
缺失的部分:
n=$(which node);n=${n%/bin/node}; chmod -R 755 $n/bin/*; sudo cp -r $n/{bin,lib,share} /usr/local
这一系列命令永远放在/usr/local/bin/中。