我很快就寫了一個Node.Js腳本,沒有進行任何錯誤處理,並且在遇到錯誤時偶爾會崩潰。粗心但高效。NodeJs:保持腳本運行一段時間?
爲了保持運行,我可以永遠使用npm並讓它永遠重啓。花式。
現在讓我們說我想讓它運行12小時(有些模塊/代碼在崩潰後重新啓動它),然後完全停止。
實現這種行爲的任何簡單方法?
我很快就寫了一個Node.Js腳本,沒有進行任何錯誤處理,並且在遇到錯誤時偶爾會崩潰。粗心但高效。NodeJs:保持腳本運行一段時間?
爲了保持運行,我可以永遠使用npm並讓它永遠重啓。花式。
現在讓我們說我想讓它運行12小時(有些模塊/代碼在崩潰後重新啓動它),然後完全停止。
實現這種行爲的任何簡單方法?
如果您希望node.js進程在12小時後自行停止,那麼您可以從現在開始設置一個計時器12小時,並致電process.exit()
。
setTimeout(function() {
process.exit(0);
}, 1000 * 60 * 60 * 12);
如果你想使用的系統像永遠,但你都希望在12小時內停止程序並且不希望永遠重新啓動它,那麼你可以只運行一個代上工作,預定從現在開始執行12小時forever stop /somepath/yourscript.js
。
P.S.沒有辦法自己經常崩潰的系統是「不小心,但高效」。它可能會很快開始,但它也是鬆散且危險的,從長遠來看永遠不是有效的代碼編寫方式。我建議你開始刪除你已經燒入代碼的所有technical debt。
我從運行開發團隊多年以來最喜歡的一句話是有些修辭問題:「爲什麼沒有足夠的時間來第一次做對,而是總是有足夠的時間去完成它。」
完整的答案與不同的解決方案和建議反對粗心大意。謝謝。儘管如果我補充說:「我是一個最近了解異步編程如何工作的業餘學習節點,在構建我的項目時我不斷改進以前的代碼,而我的主要問題是我從不做任何事情,因爲我希望我所做的一切是完美的「,你會繼續講我的話嗎? ;-)這篇文章對我來說是一種治療!乾杯! –
@KLôN - 嗯,當你在這裏時,你可以閱讀[最小可行產品](https://en.wikipedia.org/wiki/Minimum_viable_product),但是它並沒有說你的代碼應該很差設計和充滿了錯誤。如果你只是在學習,你必須隨時學習,但學習的一個非常重要的部分是學習如何編寫健壯,穩定的代碼來處理錯誤條件。你不應該認爲自動重啓是學習如何防止代碼崩潰的替代品。 – jfriend00
我完全同意。說實話,我已經開始在絕對需要的時候處理錯誤,並且我正在計劃使用我所學到的來涵蓋所有可能的結果。 Thx爲您的時間和建議! –
您可以使用Linux「at」命令設置相對定時器。永遠將處理重新啓動腳本,如果它崩潰。
啓動腳本
forever start /path/yourscript.js
計劃停機命令
echo 'forever stop /path/yourscript.js' | at now + 12 hours
-
請注意,您可能需要安裝「at」 - 例如。 (apt-get install at
)
注意,你還可以安排 「在」 執行shell腳本:
forever stop /path/yourscript.js
at now +12 hours -f ~/stopscript.sh
使用cluster
模塊,主站在發生錯誤時重新啓動集羣。
的高手,只是這樣的運行代碼:
setTimeout(function() {
process.exit(0);
}, 12 * 3600 * 1000);
你的數學對於如何從現在開始做12個小時的'setTimeout()'有點不合適。你的因數是1000. – jfriend00
@ jfriend00謝謝指出。 – Calvinxiao
如果您使用的是UNIXy操作系統,可以使用at
命令在給定時間永遠殺。
實施例:
$ echo 'forever stop whatever.js' | at now + 12 hours
「不小心,但高效」。這就是問題。我認爲它很快但沒用。 – undefined
;-) @Vohuman:我不同意。該腳本是僅供個人使用的業餘機器人。當它崩潰時,它只會阻礙我,而不是太多。如果崩潰立即由foreverJs立即重啓,它不會影響其效率。我仍在開發它,並學習如何在這個過程中正確使用Node,最後留下罕見的錯誤處理。此外,你可以刪除引言(意味着只笑),問題仍然存在:-) –