2015-07-01 10 views
8

Próbuję uruchomić proces w tle jako deamon, ale działa on tylko wtedy, gdy używam root jako użytkownik.Supervisord na Linuksie CentOS 7 działa tylko wtedy, gdy działa z rootem

Oto, co zrobiłem.

nadzorca zainstalowana jak powiedział na swojej stronie internetowej

$ yum -y install python-setuptools 

$ easy_install supervisor 

tworzone foldery config

$ mkdir -p /etc/supervisor/conf.d 

zapełnić z ustawieniami domyślnymi

$ echo_supervisord_conf > /etc/supervisor/supervisord.conf 

dodać nowego użytkownika

$ useradd gogopher 

na CentOS 7, aby uruchomić automatycznie musiałem zrobić to

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

dodaniu kodu poniżej

[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             

teraz mogę włączyć go tak, że zaczyna się na restart. to wszystko działa dobrze.

$ systemctl enable supervisord 

$ systemctl start supervisord 

$ systemctl status supervisord 

OK

edytując plik konfiguracyjny zawierać pliki z folderu conf.d

$ vim /etc/supervisor/supervisord.conf 

dodając na końcu pliku

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

dodanie prostego programu

$ 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 restart supervisord

żadnego błędu, ale proces nie działa

gdybym restart nic się nie dzieje

$ systemctl status supervisord 

pokazuje, że supervisord jest uruchomiony, ale nie program demon.

jeśli biegnę

$ supervisorctl reload 

pojawia się błąd

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

jeśli biegnę

$ supervisorctl status main 

pojawia się błąd

http://localhost:9001 refused connection 

Mam już wyłączone selinux.

ale najdziwniejsze jest to, że jeśli zmienię oba na root, to działa.

Plik wykonywalny może być wykonywany przez grupę użytkowników i inne.

Więc nie mam pojęcia, co się dzieje. Słyszałem, że nie powinienem używać root'a jako użytkownik, który uruchamia serwer WWW ze względów bezpieczeństwa.

+2

Czy go rozwiązać? Jeśli tak, w jaki sposób? –

+7

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

Odpowiedz

4

Dla wszystkich osób mających ten sam problem działa to dla mnie.

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 

Wklej zawartość do /etc/rc.d/init.d/supervisord (nie jestem właściciela tego scenariusza, przez I Do not pamiętam teraz gdzie mam go od)

#!/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 

Uczyń skrypt i zarejestrować go jako usługa

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 już nie istnieje. Musisz utworzyć skrypt w /etc/init.d, więc dbaj o ścieżkę. –

Powiązane problemy