运行 永远的 sudo 命令
running sudo command with forever
我有以下用于启动我的 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 上启动 运行ning 的进程。但是,我想连续使用 forever 到 运行 我的网络应用程序。我已经从应用程序目录中尝试 运行ning 这个:
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
文件而不是 forever
命令中的 npm run start-prod
因为我使用 better-npm-run 在我的 package.json
文件中启动服务器——又名:我 必须 使用 npm run start-prod
和 npm run start-prod-api
启动网络应用程序。
我做错了什么?我怎样才能 运行 这个具有管理员权限的进程(所以它可以 运行 在端口 80 上)并且仍然永远使用?
谢谢
正如@marekful 所说,解决方案是通过命令 sudo visudo
在 /etc/sudoers
中添加一行,以允许在不使用 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 node /home/azureuser/myapp/node_modules/concurrently/src/main.js --kill-others "npm run start-prod" "npm run start-prod-api"
当我 运行 此命令成功启动时,我的 Web 应用程序成功启动—请注意,如果我 运行 它没有 sudo
前缀,它 不会 开始,因为它必须在端口 80 上启动 运行ning 的进程。但是,我想连续使用 forever 到 运行 我的网络应用程序。我已经从应用程序目录中尝试 运行ning 这个:
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
文件而不是 forever
命令中的 npm run start-prod
因为我使用 better-npm-run 在我的 package.json
文件中启动服务器——又名:我 必须 使用 npm run start-prod
和 npm run start-prod-api
启动网络应用程序。
我做错了什么?我怎样才能 运行 这个具有管理员权限的进程(所以它可以 运行 在端口 80 上)并且仍然永远使用?
谢谢
正如@marekful 所说,解决方案是通过命令 sudo visudo
在 /etc/sudoers
中添加一行,以允许在不使用 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
forapt-get
? it's special forapt-get
.
所以我觉得你可以试着把需要的命令加一行sudo
,比如node
等
如有任何疑问,请随时告诉我。