2014-11-01 358 views
3

我有一個nodejs應用程序,我想在服務器重啓後自動重啓。我已經創建了一個腳本來永久啓動應用程序,如下所示。nodejs應用程序在重啓後無法正常啓動

#!/bin/sh 
export PATH=/usr/bin:$PATH 
forever start --command node --minUptime 1000 --spinSleepTime 10000 --sourceDir /etc/csc server.js >> /etc/csc/log.txt 2>&1 

我還創建了一個crontab項目重新啓動後運行該腳本:

@reboot /etc/csc/csc-starter.sh 

雖然,我不認爲在crontab部分是真正相關的,因爲我會在下面解釋。問題是,雖然nodejs應用程序在重新啓動後確實啓動,但它不會正確響應客戶端請求。例如,被顯示(在瀏覽器中)的URL的調用應導致應用程序的主視圖,在下面的輸出結果:

{ 
code: "ResourceNotFound", 
message: "/" 
} 

有趣的是,當調用的被觀察到的相同輸出手動啓動腳本。但是,如果我用以下方式運行nodejs應用程序:

node /etc/csc/server.js 

它工作得很好。我是Linux的相對新手,你可以放心地假設,我可能並不知道一些在Linux中工作的可接受真理,比如將應用程序放在/ etc下的合理性。

任何想法爲什麼永遠啓動應用程序會改變它的內部行爲?這個應用程序非常簡單。它基於restify並且有幾條REST路線,以及託管靜態內容,但它確實沒什麼特別。

謝謝。

回答

3

/etc可能不是您的應用程序的最佳位置。儘管這與你的問題沒有直接關係。

當您從命令行手動啓動應用程序時,您可能已經位於/ etc/csc目錄中。

嘗試添加目錄更改爲你的啓動腳本:

#!/bin/sh 
export PATH=/usr/bin:$PATH 
cd /etc/csc 
forever start --command node --minUptime 1000 --spinSleepTime 10000 --sourceDir /etc/csc server.js >> /etc/csc/log.txt 2>&1 

該應用可能配置爲使用一個子目錄關閉其靜態資源的當前目錄。

-

你應該考慮把你的應用程序在/ opt/CSC。這是第三方應用程序更通用的地方。/etc更多用於系統配置。

+0

感謝您的快速響應。我添加了更改目錄,一切都很好!我想我已經想了很多關於永遠會爲我做些什麼,特別是因爲它需要一個sourceDir參數。活到老,學到老。 (並且我將該應用程序移至/ opt/csc,感謝該技巧)。 – lje 2014-11-01 21:42:32

0
/etc/csc server.js >> 

刪除路徑中的空間。

/etc/csc/server.js >>