2015-07-01 11 views
8

के साथ चलाने पर काम करता है मैं पृष्ठभूमि में एक प्रक्रिया को एक डीमॉन के रूप में चलाने की कोशिश कर रहा हूं लेकिन यह केवल तब काम करता है जब मैं उपयोगकर्ता के रूप में रूट का उपयोग करता हूं।लिनक्स CentOS 7 पर पर्यवेक्षक केवल रूट

यही वह है जो मैंने किया था।

स्थापित पर्यवेक्षक के रूप में अपनी वेबसाइट पर बताया

$ yum -y install python-setuptools 

$ easy_install supervisor 

config फ़ोल्डरों

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

बनाया डिफ़ॉल्ट सेटिंग के साथ पॉप्युलेट

$ echo_supervisord_conf > /etc/supervisor/supervisord.conf 

एक नया उपयोगकर्ता जोड़ने

$ useradd gogopher 
CentOS 7 पर

यह स्वचालित रूप से प्रारंभ करने के लिए मैं इस

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

इतना है कि यह रिबूट पर शुरू होता है अब मैं इसे सक्षम कर सकते हैं नीचे

[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             

कोड जोड़ करना था। यह सब ठीक काम करता है।

$ systemctl enable supervisord 

$ systemctl start supervisord 

$ systemctl status supervisord 

ठीक

संपादन कॉन्फ़िग फ़ाइल एक साधारण प्रोग्राम

जोड़ने फ़ाइल

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

के अंत में जोड़ने conf.d फ़ोल्डर

$ vim /etc/supervisor/supervisord.conf 

से फ़ाइलों को शामिल करने

$ 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 पुनः आरंभ

कोई त्रुटि supervisord, लेकिन इस प्रक्रिया

काम नहीं करता है अगर मैं रिबूट कुछ नहीं होता

$ systemctl status supervisord 

से पता चलता है कि यह supervisord नहीं बल्कि डेमॉन कार्यक्रम चल रहा है।

अगर मैं

$ supervisorctl reload 

मैं अगर मैं

$ supervisorctl status main 

चलाने त्रुटि

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

मिल रहा त्रुटि मिलती है चलाने

http://localhost:9001 refused connection 

मैंने पहले ही सेलिनक्स को अक्षम कर दिया है।

लेकिन अजीब हिस्सा यह है कि यदि मैं दोनों को रूट में बदलता हूं, तो यह काम करता है।

निष्पादन योग्य उपयोगकर्ता समूह और अन्य द्वारा निष्पादित करने में सक्षम है।

तो मुझे नहीं पता कि क्या हो रहा है। मैंने सुना है कि मुझे रूट का उपयोग उपयोगकर्ता के रूप में नहीं करना चाहिए जो सुरक्षा कारणों से वेबसर्वर चला रहा है।

+2

आप इसे हल कर लिया है के रूप में यह रजिस्टर? यदि हां, तो कैसे? –

+7

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

उत्तर

4

सभी लोगों के लिए एक ही समस्या है, यह मेरे लिए काम करता है।

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 

/etc/rc.d/init.d/supervisord में इस सामग्री पेस्ट करें (मैं इस स्क्रिप्ट का नहीं मालिक, अब तक मैं नहींं याद मैं कहाँ से मिल गया)

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

स्क्रिप्ट निष्पादन और एक सेवा

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 अब मौजूद नहीं है। आपको /etc/init.d में अपनी स्क्रिप्ट बनाने की आवश्यकता है, इसलिए पथ के बारे में परवाह करें। –