2016-11-04 79 views
0

我试图在我的ec2机器启动时启动快速应用程序。我有一个启动脚本是:EC2 ubuntu启动节点服务器在重新启动不起作用

#!/bin/bash 
echo "will reroute traffic" >> /home/ubuntu/log.logs 

sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 
sudo iptables -A INPUT -p tcp -m tcp --sport 80 -j ACCEPT 
sudo iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT 

echo "will kill node" >> /home/ubuntu/log.logs 

if pgrep node &> /dev/null ; then killall -KILL node ; fi 
if pgrep nodejs &> /dev/null ; then killall -KILL nodejs ; fi 

echo "will run node server" >> /home/ubuntu/log.logs 
cd server && npm install && npm run build && npm run start </dev/null &>/dev/null & 
echo "has run node server" >> /home/ubuntu/log.logs 

如果我从控制台启动它,它会启动服务器,退出并且服务器正常运行。

要启动它,我已经添加了这些行/etc/rc.local

rm -f /home/ubuntu/log.logs 
echo "will run" >> /home/ubuntu/log.logs 
/bin/bash /home/ubuntu/startup.sh 
echo "has run" >> /home/ubuntu/log.logs 

重新启动后,服务器没有响应,它看起来像没有开始(如果运行的是不是服务器日志蜱有)

log.logs输出看起来不错:

will run 
will will reroute traffic 
will kill node 
will run node server 
has run node server 
has run 

所以一切似乎已经执行,但该节点应用程序没有运行,我通过运行top | grep node确认没有返回任何内容。

回答

0

我发现便宜的(或免费的)AWS虚拟机受到CPU /网络限制,导致npm安装等失败。也许使用更好的VPS或尝试yarn。也让它记录npm的东西到文件而不是dev/null。

+0

很好的建议。原来,root并不知道npm,即使成为root后,我运行脚本为'ubuntu':'su -c ./startup.sh - ubuntu'引发错误'npm:command not found' – Guig

0

事实证明,我安装了npmnodenvm,并且nvm向.bashrc添加了一个脚本来加载这些库。要在重新启动时启动脚本,我使用的是不是采购.bashrc的cron。此外,AWS EC2 ubuntu实例上的默认.bashrc从检查终端是否已从终端运行开始,并将其转义出来,但未从终端运行。因此从cron中获取它没有任何影响。

我没有看到,因为不及格线

cd server && npm install && npm run build && npm run start 

没有登录任何

我结束了手动采购上记录的路径npmnode

相关问题