我有一個node-cron呼叫函式的簡單時間表:
cron.schedule('00 00 00 * * *', () => {
console.log('update movies', new Date().toISOString());
updateMovies();
});
當我使用 PuTTy 登錄我的服務器或使用 Digital Ocean 中的 Droplet 控制臺,然后運行該updateMovies.mjs檔案node server/updateMovies.mjs并等待 cron-job 應該運行的時間時,一切都按預期進行。
但是當我關閉 PuTTy 或 Digital Ocean 中的 Droplet 控制臺時,當 cron-job 應該運行時什么也沒有發生。所以當我關閉會話時,服務器似乎丟失了 cron-job。
uj5u.com熱心網友回復:
簡答
您需要在后臺運行該應用程式
nohup node server/updateMovies.mjs >/dev/null 2>&1
長答案
直接在 shell 中運行您的應用程式僅用于演示或學術目的。在企業環境中,您應該有一個實時行程,例如獨立于 shell 用戶運行的服務器。
前臺和后臺行程
- 需要用戶啟動或與它們互動的行程稱為前臺行程
- 獨立于用戶運行的行程稱為后臺行程。
如何運行后臺行程 (Linux)
沒有人使用 Windows 進行現代部署,因此在 Linux 中通常的策略是使用nohup
服務器.js
var express = require('express');
var app = express();
app.get('/', function(req, res) {
res.type('text/plain');
res.send('Hell , its about time!!');
});
app.listen(process.env.PORT || 8080);
nohup node server.js >/dev/null 2>&1
如果您使用某些 shell 客戶端登錄到服務器,并且只運行node server.js它,它將啟動,但如果您關閉 shell 視窗,該程序將結束。

如何使用 nodejs 和 PM2 運行后臺行程
pm2 server.js
更多細節在這里:
https://pm2.keymetrics.io/docs/usage/quick-start/
最佳方式:碼頭工人
您需要將您的應用程式 dockerize 化,它將使用此命令在任何地方運行:
docker run -d my_app_nodejs ....
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/534371.html
標籤:节点.js服务器节点计划
下一篇:添加角色discordjs14
