2016-11-04 115 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

相關問題