ubuntu – Upstart:为什么在以不同用户身份运行时有两个进程?

我想保持一个nodejs应用程序运行,所以我遵循这个: http://howtonode.org/deploying-node-upstart-monit并安装了Monit和Upstart,它们已经完美地工作了几个月.我刚刚为我的应用添加了一项功能,允许磁盘写入并获得权限错误.我去寻找一切因为看起来权限错误不应该是问题.事实证明,我从Upstart开始的用户实际上并不是运行应用程序的用户

当我跑:

sudo -u deploy NODE_ENV=production node /srv/www/[name of my app]/dist/app.js

无论是通过Monit / Upstart,还是仅通过SSH,它都会创建2个进程.来自ps ax:

2869 ?        Ss     0:00 sudo -u deploy node /srv/www/[name of my app]/dist/app.js
2878 ?        Sl     0:01 node /srv/www/[name of my app]/dist/app.js

当我以部署用户身份登录并运行时:

NODE_ENV=production node /srv/www/[name of my app]/dist/app.js

只有一个过程!

3131 pts/1    Sl+    0:04 node /srv/www/[name of my app]/dist/app.js

这个问题是由于某种原因,第二个进程没有正确的写入权限,似乎是正在进行工作的进程.当我不使用Upstart包括写入时,一切都很完美,但我需要Upstart / Monit来保持我的nodejs应用程序运行.

那么在这种情况下配置Monit / Upstart的最佳方法是什么呢?我想保持低权限(因此没有sudo的部署用户),我希望应用程序在崩溃时启动.

这是我的Upstart脚本:

start on startup
stop on shutdown

script
    export HOME="/home/deploy"

    echo $$> /var/run/[name of my app].pid
    exec sudo -u deploy NODE_ENV=production node /srv/www/[name of my app]/dist/app.js >> /srv/www/log/[name of my app].sys.log 2>&1
end script

有什么不对吗?

该教程说使用sudo -u user …以便以您想要的用户身份运行它.但这就是导致问题的原因.

谢谢!

保罗

只要进程正在运行,sudo就会持续存在,因此解决方案是使用upstart的setuid和setgid节.问题在于发送守护程序的PID的行需要root权限.这是一个解决方法

[名称]的.conf:

start on runlevel [2345]
stop on runlevel [016]

env HOME=/home/deploy
env NODE_ENV=production

setuid deploy
setgid deploy

exec node /srv/www/[name]/dist/app.js

[名] -pidfile.conf

start on started [name]
stop on stopped [name]

pre-start script
    initctl status name | cut -d" " -f4 > /var/run/[name].pid
end script

post-stop exec rm -f /var/run/[name].pid

相关文章

目录前言一、创建Hadoop用户二、更新apt和安装Vim编辑器三、...
原文连接:https://www.cnblogs.com/yasmi/p/5192694.html ...
电脑重启后,打开VirtualBox,发现一直用的虚拟机莫名的消失...
参见:https://blog.csdn.net/weixin_38883338/article/deta...
Ubuntu 18.04 LTS 已切换到 Netplan 来配置网络接口。Netpla...
介绍每个 Web 服务都可以通过特定的 URL 在 Internet 上访问...