【发布时间】:2016-09-07 13:16:09
【问题描述】:
我有以下命令用于启动我的 Node.js 网络应用程序:
sudo node /home/azureuser/myapp/node_modules/concurrently/src/main.js --kill-others "npm run start-prod" "npm run start-prod-api"
当我运行此命令时,我的 Web 应用程序已成功启动 - 请注意,如果我在没有 sudo 前缀的情况下运行它,它确实不会启动,因为它必须启动在端口 80 上运行的进程. 但是,我想使用forever 不断地运行我的网络应用程序。我试过从 app 目录运行它:
sudo forever -c "node /home/azureuser/myapp/node_modules/concurrently/src/main.js --kill-others \"npm run start-prod\" \"npm run start-prod-api\"" -l forever.log -o out.log -e err.log -a --minUptime 20000 --spinSleepTime 5000 --uid "production" ./
当我尝试这个时,我收到以下错误:
Error: spawn EACCES
at exports._errnoException (util.js:870:11)
at ChildProcess.spawn (internal/child_process.js:298:11)
at Object.exports.spawn (child_process.js:362:9)
at spawn (/home/azureuser/myapp/node_modules/concurrently/node_modules/cross-spawn/index.js:87:19)
at /home/azureuser/myapp/node_modules/concurrently/src/main.js:109:21
at arrayMap (/home/azureuser/myapp/node_modules/concurrently/node_modules/lodash/index.js:1377:25)
at Function.map (/home/azureuser/myapp/node_modules/concurrently/node_modules/lodash/index.js:5891:14)
at run (/home/azureuser/myapp/node_modules/concurrently/src/main.js:105:22)
at main (/home/azureuser/myapp/node_modules/concurrently/src/main.js:37:5)
at Object.<anonymous> (/home/azureuser/myapp/node_modules/concurrently/src/main.js:306:1)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Function.Module.runMain (module.js:441:10)
at startup (node.js:134:18)
error: Forever detected script exited with code: 1
当我尝试在 -c 命令中添加 sudo 时,它也不起作用。此外,我尝试将此行添加到Ubuntu 中的/etc/init/myapp.conf 文件中,以尝试在启动时启动该过程:
su - azureuser -c "forever -c \"node /home/azureuser/myapp/node_modules/concurrently/src/main.js --kill-others \\\"npm run start-prod\\\" \\\"npm run start-prod-api\\\"\" -l forever.log -o out.log -e err.log -a --minUptime 20000 --spinSleepTime 5000 --uid \"production\" ./"
这也不起作用。
这也是不是在forever 命令中写出server.js 文件而不是npm run start-prod 的选项,因为我在package.json 文件中使用better-npm-run 来启动服务器——又名:我必须使用 npm run start-prod 和 npm run start-prod-api 启动网络应用程序。
我做错了什么?如何以管理员权限运行此进程(以便它可以在端口 80 上运行)并且仍然可以永久使用?
谢谢
【问题讨论】:
-
阅读
sudoers文件。您可以添加一个规则,允许该特定 Linux 用户以 root(或任何其他用户)身份运行该特定命令,而无需输入密码。 askubuntu.com/questions/159007/… -
@marekful 感谢您的回复。我需要将哪个命令添加到
sudoers文件中?forever?或者better-npm-run这样使用端口 80 不成问题? -
@marekful 我尝试将
forever、better-npm-run和concurrently添加到sudoers文件中,但是我仍然收到Error: spawn EACCES错误。
标签: node.js azure ubuntu npm forever