2013-03-07 30 views
2

我有一個簡單的bash腳本編寫,自動部署代碼到我的Node.js服務器提交時,然後重新啓動服務器使用永遠。該腳本定期在cronjob上運行。噢,該網站在發佈之前仍處於開發階段,因此服務器不斷重新啓動。 :)節點 - 嘗試重新啓動使用Forever將無法在cronjob上的bash腳本中工作

腳本做一些其他的事情,但真正有趣的部分是下面的代碼兩行:

forever stopall 
forever start app.js 

當我在命令行手動運行該腳本自己,下面的輸出出現來自這兩個命令:

Stopping all node jobs 
info: Forever stopped processes: 
data:  uid command    script forever pid logfile       uptime 
data: [0] ev5a /usr/local/bin/node app.js 17482 17484 /home/ec2-user/.forever/ev5a.log 0:0:13:17.967 
Starting up node server again 
info: Forever processing file: app.js 

然而,當作業通過cron自動運行,這是被輸出:

Stopping all node jobs 
^[[32minfo^[[39m: No forever processes running 
Starting up node server again 
^[[32minfo^[[39m: Forever processing file: ^[[90mapp.js^[[39m 

這對我來說真的很奇怪。看起來,當腳本通過cron運行時,Forever似乎認爲甚至沒有任何Node進程在嘗試停止時運行。我知道Node進程正在運行的事實,所以不知道爲什麼這會顯示出來。似乎兩種運行方法之間應該沒有區別。這兩個腳本都以相同的用戶身份運行。有誰知道爲什麼永遠像這樣奇怪的表現?

+0

你會輸入'crontab -l'嗎? – meeDamian 2013-04-25 10:08:17

回答

0

我還沒有測試過它,但是您可能想要查看一些永遠的選項,例如--exitcrash標誌。

Forever在處理自動重新啓動服務器的其他程序時遇到問題。雖然不特定於Chron,但this link可能會有所幫助。

1

forever通常僅限於當前用戶擁有的進程。如果啓動cron作業的用戶與最初啓動該進程的用戶不同,那麼forever stopall將找不到任何要殺死的PID。

例如,我使用名爲「nodejs」的用戶執行所有節點應用程序。如果我使用交互式系統,我可以使用sudo -H -u nodejs forever list。並且在root cron或/etc/rc.local上,我將使用su - nodejs -c "forever start /path/to/app.js"

相關問題