我正在经历永远的奇怪行为,我想用它来保持我的节点应用程序。
我希望以常规用户lwood
运行我的永久流程,而不是root
。
我需要知道如何在root
模式下正常运行,但作为用户lwood
。 (这是必需的,因为,例如,作为一种特殊情况,upstart脚本以root身份运行。)
这些命令说明了我的问题(我在Ubuntu 12.04上,而$
是普通用户而#
是root用户):
$ su
[type in su password]
# cd /home/lwood/myapp
# sudo -u lwood forever -a -l "/home/lwood/myapp/logfile.log" start app.js
info: Forever processing file: app.js
# forever list
info: No forever processes running
# exit
$ forever list
info: No forever processes running
所以永远成功地开始了,但是在lwood和root都没有进程正在运行!
如何解决此问题?
答案 0 :(得分:2)
如果您正在使用暴发版,请尝试此操作(将其添加到您的新手脚本)
exec su -s / bin / sh -c'exec“$ 0”“$ @”'用户名 - / usr / local / bin / forever ...
参考:https://superuser.com/questions/213416/running-upstart-jobs-as-unprivileged-users
答案 1 :(得分:1)
在具有systemd(RHEL 7,CentOS 7,Debian,Ubuntu,Fedora,...)的系统上,您可以将此脚本用作/usr/lib/systemd/system/nodejs.service或等效的(检查其他*。服务文件):
[Unit]
Description=Node.js Application
After=postgresql.service network.target
Wants=postgresql.service
[Service]
ExecStart=/usr/bin/su - <user> -c '/usr/bin/npm start --prefix /path/to/app'
WorkingDirectory=/path/to/app
Restart=always
RestartSec=30
[Install]
WantedBy=multi-user.target
答案 2 :(得分:0)
可能是因为它作为不同用户的不同上下文运行。也许你需要为列表添加sudo膨胀:
sudo -u lwood forever list