3

我一直在经历奇怪的行为,我想用它来保持我的节点应用程序的活力。

我想以普通用户的身份运行我的永久进程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 下运行!

我该如何解决这个问题?

4

3 回答 3

2

如果您使用的是暴发户,试试这个(把它放到您的暴发户脚本中)

exec su -s /bin/sh -c 'exec "$0" "$@"' 用户名 -- /usr/local/bin/forever ...

参考:https ://superuser.com/questions/213416/running-upstart-jobs-as-unprivileged-users

于 2013-09-22T09:11:25.220 回答
1

在带有 systemd 的系统(RHEL 7、CentOS 7、Debian、Ubuntu、Fedora 等)上,您可以将此脚本用作 /usr/lib/systemd/system/nodejs.service 或等效文件(检查其他 *.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
于 2018-03-12T17:23:11.170 回答
0

可能是因为它在不同的用户上作为不同的上下文运行。也许您需要为列表添加 sudo a swell:

sudo -u lwood forever list
于 2013-09-22T05:05:33.430 回答