gpt4 book ai didi

node.js - 永远运行 sudo 命令

转载 作者:行者123 更新时间:2023-12-04 18:37:54 30 4
gpt4 key购买 nike

我有以下命令用于启动我的 Node.js Web 应用程序:

sudo node /home/azureuser/myapp/node_modules/concurrently/src/main.js --kill-others "npm run start-prod" "npm run start-prod-api"

当我运行此命令时,我的网络应用程序已成功启动 - 请注意,如果我在没有 sudo 前缀的情况下运行它,它不会启动,因为它必须启动一个进程在端口 80 上运行。但是,我想使用 forever持续运行我的网络应用程序。我尝试从应用程序目录运行它:

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\" ./"

这也不起作用。

可以选择在 中写出 server.js 文件而不是 npm run start-prod永远 命令,因为我使用 better-npm-run在我的 package.json 文件中启动服务器 - 又名:我必须使用 npm run start-prod 启动 Web 应用程序>npm run start-prod-api

我做错了什么?我怎样才能以管理员权限运行这个进程(这样它就可以在端口 80 上运行)并且仍然可以永远使用?

谢谢

最佳答案

正如@marekful所说,解决方案是在/etc/sudoers中添加一行通过命令sudo visudo允许在不使用 sudo 的情况下执行.

还有一个有用的页面 https://askubuntu.com/questions/72267/how-to-allow-execution-without-using-the-sudo您可以引用一下。

我尝试创建并运行 shell 脚本文件以成功测试,请参阅以下步骤。

~ $ touch cmd.sh
~ $ chmod +x cmd.sh
~ $ vim cmd.sh # Adding the content below, testing for using `apt-get update`

#!/bin/sh
sudo apt-get update

~ $ sudo visudo # Adding a line with the content `<my-user> ALL=NOPASSWD: /usr/bin/apt-get` at the end of the `sudoers` file; find the path of `apt-get` using `which apt-get`
~ $ ./cmd.sh # it works fine without using password

Note: Why do I need to add the sudo for apt-get? it's special for apt-get.

所以我认为你可以尝试为所需的命令添加一行 sudo ,如node

如有任何疑问,请随时告诉我。

关于node.js - 永远运行 sudo 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37174463/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com