在su下以不同用户身份永久运行的方法

3

我在使用forever来保持我的node应用程序在线时,遇到了一些奇怪的问题。

我希望将我的forever进程作为我的常规用户lwood运行,而不是作为root运行。

我需要知道如何在root模式下正确运行forever,但作为用户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

So forever 成功启动了,但是没有任何进程在 lwood 或 root 用户下运行!

我该如何解决这个问题?


在你之前的评论中,你说应用程序没有运行。你的永久日志文件中有什么?它在哪里崩溃了? - Roy Reiss
3个回答

2

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

0
可能是因为它正在不同用户的不同上下文中运行。也许您需要添加sudo以及列表:
sudo -u lwood forever list

  1. 如我在问题中所示,我已经以两个用户的身份运行了“forever list”,但都没有成功。
  2. 如果我在#(root mode)中运行您的命令,我会收到一个异常“TypeError:对象错误:EACCES,权限被拒绝'/root/.forever/sock'”。这很有道理,因为我正在尝试将root的进程列出为lwood
  3. 一个简单的方法来查看我的应用程序是否正在运行是刷新我的浏览器。该应用确实没有运行 :) 还有其他的想法吗?
- lwood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接