我看到我可以使用nohup node index.js
来运行后台任务。
我的问题与以下来源有关。
https://github.com/Palpasa/Node-Express-Seed。
在此源代码中,package.json
文件包含nodemon
,当我使用npm start
启动服务器时,它正在运行。
现在,我试图在后台运行服务器。
但它随着以下错误而崩溃。
[nodemon] 1.14.12
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node app.js`
/home/tom/Documents/work/wallet/app/app.js:3
import bodyParser from 'body-parser';
^^^^^^
SyntaxError: Unexpected token import
at createScript (vm.js:80:10)
at Object.runInThisContext (vm.js:139:10)
at Module._compile (module.js:607:28)
at Object.Module._extensions..js (module.js:654:10)
at Module.load (module.js:556:32)
at tryModuleLoad (module.js:499:12)
at Function.Module._load (module.js:491:3)
at Function.Module.runMain (module.js:684:10)
at startup (bootstrap_node.js:187:16)
at bootstrap_node.js:608:3
[nodemon] app crashed - waiting for file changes before starting...
如何在后台运行此服务器?
答案 0 :(得分:2)
你可以在你的腻子上运行几个屏幕。
屏幕
然后你将有一个屏幕。 您现在可以在此屏幕上运行您的节点实例。
此屏幕一直存在。
键入 CTRL + A + D 退出屏幕。
即使您退出putty,您的节点实例现在仍然存在。
答案 1 :(得分:1)
Child Process是你想要使用的。
const { spawn } = require('child_process');
const otherScript = spawn('node', ['script-you-wanna-run.js']);
otherScript.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
答案 2 :(得分:0)
您可能需要使用ES-2015
babel预设来转换import语句。如果您不需要专门进行ES6导入,只需使用require
var bodyParser = require("body-parser")
另外请注意,您可以尝试使用Forever npm包。这样就可以在后台启动节点服务器
npm install -g forever
forever start server.js
// To run on a custom po
PORT=3000 forever start server.js
答案 3 :(得分:0)
您无法在后台运行nodemon
(即nohup npm start
< => nohup nodemon app.js
),nodemon应该用于开发环境,它可以让您看到进行了哪些更改在开发过程中的文件,如果您正在寻找生产中运行快速应用程序,那么您应该使用process manager,它会在崩溃时自动重新启动应用程序,或者在进行更改时,请阅读此article更多信息。以下是使用pm2模块的示例:
安装pm2:
npm install pm2 -g
运行app:
pm2 start app.js