我想知道如果一個普通的函數或者可以做一個函數來重啓進程;就像process.disconnect()
,但在這種情況下,它將在調用函數時重新啓動腳本。Node.js進程重啓
回答
一般流程管理器是用來(自動)重啓過程,如monit的,PM2,nodemon,永遠等
但是,您能夠從過程本身重啓通過簡單地生成一個分離的子進程等待一段時間,然後執行相同的腳本。您可以將它作爲兩個命令的組合,一個用於睡眠,另一個用於當前的命令行,或者您可以簡單地將睡眠併入您的腳本。後者的一個例子:
var spawn = require('child_process').spawn;
(function main() {
if (process.env.process_restarting) {
delete process.env.process_restarting;
// Give old process one second to shut down before continuing ...
setTimeout(main, 1000);
return;
}
// ...
// Restart process ...
spawn(process.argv[0], process.argv.slice(1), {
env: { process_restarting: 1 },
stdio: 'ignore'
}).unref();
})();
在Windows上,你可能需要添加detached: true
您spawn()
配置對象,但。對於* nix,通常不需要。
但要注意的一點是,如果原始進程在前臺啓動,任何重新啓動的進程都將無法再訪問終端。
此外,您可以消除延遲,並檢查您的腳本是否不使用任何只能在任何給定時間最多隻能使用一個進程的資源的process.env
。
最後一點:如果你的進程崩潰異常,由於內存耗盡,引發了C++斷言,一個V8的bug等等,你的過程將不會很明顯(即使你有一個'unhandledException'
事件處理程序process
設置重新啓動)。爲了解決這些情況,您幾乎需要某種外部機制來重新啓動進程。
包含'detached:true'的額外Karma點數!謝謝,我不知道! – amenthes
如果您將腳本作爲系統守護進程啓動(例如使用upstart或systemd),那麼您可以僅使用process.exit()
,並讓那些負責爲您重新創建新進程。
'process.exit()'只是關閉腳本,我需要用命令重新啓動腳本。 – Maxsanc1
- 1. 如何重新啓動Node.js子進程
- 2. 重啓進程
- 3. Socket.io node.js掛起並monit不重新啓動進程
- 4. Node.js child_process.spawn無法啓動python進程
- 5. crontab不重啓進程
- 6. c#進程不斷重啓
- 7. Node.js:如何創建啓動應用程序的「平滑」重啓?
- 8. 作爲後臺進程啓動node.js應用程序
- 9. Node.JS父進程ID
- 10. node.js的子進程
- 11. 如何防止node.js進程在Azure拓撲更改上重新啓動
- 12. 運行node.js的Azure Worker角色是否會在節點進程死亡時重新啓動節點進程?
- 13. node.js - 單進程還是多進程?
- 14. Node.js主進程vs子進程
- 15. node.js子進程進程編碼
- 16. 在服務器啓動/重新啓動時啓動Node.js應用程序
- 17. Python無法正常重啓linux進程
- 18. 在mod_wsgi守護進程'重新啓動
- 19. Cloud-init模塊重啓進程
- 20. 使用grunt重新啓動phantomjs進程
- 21. 監控進程延遲重啓
- 22. 防止永遠啓動重複進程
- 23. 重新啓動進程腳本linux
- 24. 停止postgres進程重新啓動 - mac
- 25. 通過Bash重新啓動進程
- 26. php在後臺重啓進程spamassassin
- 27. 如何循環重啓守護進程?
- 28. crontab python子進程和服務重啓
- 29. 在Windows中重新啓動進程[exe]
- 30. 配置工頭重新啓動進程
不,不管怎麼說,你都不應該在流程之外做這件事。你可以'process.exit'。 –