2015-07-01 9 views
8

Ich versuche, einen Prozess im Hintergrund als Deamon auszuführen, aber es funktioniert nur, wenn ich root als Benutzer benutze.Supervisord auf Linux CentOS 7 funktioniert nur, wenn mit root

Das habe ich gemacht.

Installierte Supervisor als

$ yum -y install python-setuptools 

$ easy_install supervisor 

Ordner der Config-

erstellt auf ihrer Website erklärte
$ mkdir -p /etc/supervisor/conf.d 

mit den Standardeinstellungen füllen

$ echo_supervisord_conf > /etc/supervisor/supervisord.conf 

einen neuen Benutzer hinzufügen

$ useradd gogopher 

auf CentOS 7 bis es automatisch hatte zu machen beginne ich unter

[Unit]                
Description=supervisord - Supervisor process control system for UNIX 
Documentation=http://supervisord.org         
After=network.target             

[Service]               
Type=forking               
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf    
ExecReload=/usr/bin/supervisorctl reload        
ExecStop=/usr/bin/supervisorctl shutdown        
User=gogopher 

[Install]               
WantedBy=multi-user.target             

diese

$ vim /usr/lib/systemd/system/supervisord.service 

hinzugefügt, um den Code zu tun, jetzt kann ich es aktivieren, so dass es beim Neustart beginnt. Das alles funktioniert gut.

$ systemctl enable supervisord 

$ systemctl start supervisord 

$ systemctl status supervisord 

OK

Editieren der Konfigurationsdatei Dateien aus conf.d Ordner enthalten

$ vim /etc/supervisor/supervisord.conf 

Zugabe am Ende der Datei

[include] 
files = /etc/supervisor/conf.d/*.conf 

Hinzufügen einer einfachen Programm

$ vim /etc/supervisor/conf.d/goapp.conf 

[program:main] 
command=/srv/www/websiteurl.com/bin/main 
autostart=true 
autorestart=true 
startretries=10 
user=gogopher 

$ systemctl Neustart supervisord

kein Fehler, aber der Prozess nicht

funktioniert, wenn ich nichts Neustart geschieht

$ systemctl status supervisord 

zeigt, dass es supervisord läuft, aber nicht den Daemon-Programm.

wenn ich laufen

$ supervisorctl reload 

ich den Fehler

error: <class 'socket.error'>, [Errno 111] Connection refused: file: /usr/lib64/python2.7/socket.py line: 571 

wenn ich

$ supervisorctl status main 

laufen bekomme ich die Fehler

http://localhost:9001 refused connection 

Ich habe selinux bereits deaktiviert.

aber der seltsame Teil ist, dass, wenn ich beide zu root ändern, es funktioniert.

Die ausführbare Datei kann von Benutzergruppe und anderen ausgeführt werden.

Also ich habe keine Ahnung was los ist. Ich habe gehört, dass ich nicht root als Benutzer verwenden sollte, der einen Webserver aus Sicherheitsgründen ausführt.

+2

Haben Sie es gelöst? Wenn ja, wie? –

+7

https://imgs.xkcd.com/comics/wisdom_of_the_ancients.png – Basil

Antwort

4

Für alle Menschen da draußen das gleiche Problem, das funktioniert für mich.

cd 
echo_supervisord_conf > /etc/supervisord.conf 
# content of /etc/supervisord.conf ... 

[supervisorctl] 
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket 

[inet_http_server] ; inet (TCP) server disabled by default 
port=*:9001  ; (ip_address:port specifier, *:port for all iface) - I had all this wrong from my original config. 
username=user 
password=passwd 

Fügen Sie diesen Inhalt in /etc/rc.d/init.d/supervisord (ich bin nicht der Besitzer dieses Skript, jetzt ich nicht daran erinnern, wo ich es von bekam)

#!/bin/sh 
# 
# /etc/rc.d/init.d/supervisord 
# 
# Supervisor is a client/server system that 
# allows its users to monitor and control a 
# number of processes on UNIX-like operating 
# systems. 
# 
# chkconfig: - 64 36 
# description: Supervisor Server 
# processname: supervisord 

# Source init functions 
. /etc/rc.d/init.d/functions 

prog="supervisord" 

prefix="/usr/local/" 
exec_prefix="${prefix}" 
prog_bin="${exec_prefix}/bin/supervisord -c /etc/supervisord.conf" 
PIDFILE="/var/run/$prog.pid" 

start() 
{ 
     echo -n $"Starting $prog: " 
     daemon $prog_bin --pidfile $PIDFILE 
     sleep 1 
     [ -f $PIDFILE ] && success $"$prog startup" || failure $"$prog startup" 
     echo 
} 

stop() 
{ 
     echo -n $"Shutting down $prog: " 
     [ -f $PIDFILE ] && sleep 1 && killproc $prog || success $"$prog shutdown" 
     echo 
} 

case "$1" in 

start) 
    start 
;; 

stop) 
    stop 
;; 

status) 
     status $prog 
;; 

restart) 
    stop 
    start 
;; 

*) 
    echo "Usage: $0 {start|stop|restart|status}" 
;; 

esac 

Machen Sie das Skript ausführbar und registrieren Sie es als Service

sudo chmod +x /etc/rc.d/init.d/supervisord 
sudo chkconfig --add supervisord 
sudo chkconfig supervisord on 

# Start the service 
sudo service supervisord start 

# Stop the service 
sudo service supervisord stop 

# Restart the service 
sudo service supervisord restart 
+1

/etc/rc.d/init.d existiert nicht mehr. Sie müssen Ihr Skript in /etc/init.d erstellen, also achten Sie auf den Pfad. –

Verwandte Themen