作为不同的用户在su中永远运行

时间:2013-09-22 05:01:51

标签: node.js bash su forever

我正在经历永远的奇怪行为,我想用它来保持我的节点应用程序。

我希望以常规用户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都没有进程正在运行!

如何解决此问题?

3 个答案:

答案 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