我有一个守护进程必须在启动时以root身份运行。
我使用pm2启动其他应用程序,但无法确定它是否可以以root身份启动应用程序。可以吗?
如果没有,我的选择是什么?
答案 0 :(得分:12)
我建议:
while True:
print("ʘʘʘʘʘʘʘʘʘʘʘʘʘʘʘʘ")
print("ʘUnit Converterʘ")
print("ʘʘʘʘʘʘʘʘʘʘʘʘʘʘʘʘ\n")
print("This program is used to convert units for height and weight.")
measurement = input("Would you like to convert height or weight?; ")
if measurement == "height" or measurement == "Height" or measurement == "h" or measurement == "H":
units = input("What units do you want to convert from?(metres/inches); ")
if units[0] == ("m"):
numberm = float(input("Please enter your height in metres; "))
inchfm = (numberm * 39.37)
inchfm = float(inchfm)
print inchfm
OR
sudo pm2 start index.js
OR
pm2 start 'http-server' /var/www -p 80
sudo pm2 startup
pm2 save
在HTTP端口上启动它
此外,我总是将pm2 start 'which http-server' /var/www -p 80
放在最后 - 这会启动与核心一样多的工作进程。查看THIS
并不总是需要以root身份启动PM2。如果您将PM2作为root并安装了cli模块,则安全性是一个很大的风险。只有在1到1024之间的端口上启动应用程序
时才需要这样做答案 1 :(得分:11)
如果您只需要以root身份运行守护程序以访问端口号(例如80或443),pm2 documentation建议使用authbind
。因此,如果您希望用户yourusername
有权访问端口80,请运行:
$ sudo apt-get install authbind
$ sudo touch /etc/authbind/byport/80
$ sudo chown yourusername /etc/authbind/byport/80
$ sudo chmod 755 /etc/authbind/byport/80
$ authbind --deep pm2 update
然后使用authbind --deep pm2
代替pm2
。文档建议设置别名。
答案 2 :(得分:8)
我遇到了sudo pm2 start api
的问题,但这是因为pm2已经在没有sudo权限的情况下运行,因此你需要运行:
pm2 kill
sudo pm2 start api
这会首先杀死pm2 deamon,以便它在sudo中启动,但之后你需要sudo用于所有 pm2命令,例如:sudo pm2 ls
答案 3 :(得分:3)
浪费了大约一个小时
在AWS EC2机器上,由于早期安装,一个系统处于不一致状态,这迫使应用程序中sudo
的所有命令都必须升至操作系统的所有命令,例如sh等。
pm2 是以root用户身份运行:
ps aux | grep pm2
# root ... PM2 v4.1.2: God Daemon (/root/.pm2)
现在pm2 以ubuntu的身份运行:
ps aux | grep pm2
# ubuntu ... PM2 v4.1.2: God Daemon (/home/ubuntu/.pm2)
以下命令有效:
sudo pm2 kill
sudo npm remove pm2 -g
sudo npm i -g pm2@latest
sudo pm2 update
sudo chown -R ubuntu:ubuntu /home/ubuntu/.pm2
希望有帮助
答案 4 :(得分:0)
你应该以root身份启动pm2,(sudo pm2启动app.js),然后你的应用将以root身份启动
答案 5 :(得分:0)
首先,全局安装pm2。 然后使用此命令将root权限设置为pm2
sudo chown ubuntu:ubuntu /home/ubuntu/.pm2/rpc.sock /home/ubuntu/.pm2/pub.sock
答案 6 :(得分:0)
您可能会考虑使用iptables路由流量,因为此错误背后有一个原因
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000