如何在node.js中运行后台任务

时间:2018-02-06 19:24:27

标签: node.js express

我看到我可以使用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...

如何在后台运行此服务器?

4 个答案:

答案 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包。这样就可以在后台启动节点服务器

FOREVER

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