python - supervisorctl - ¿Comenzar supervisord como root o no?
supervisord port (4)
Tu tienes:
Según tengo entendido, recibiste este mensaje de CRIT que te está molestando:
Supervisor de CRIT ejecutándose como root (sin usuario en el archivo de configuración)
Las palabras entre paréntesis son una pista. Este mensaje indica que puede estar ejecutando Supervisor como root involuntariamente .
Hacer esto:
Entonces la solución es bastante simple: dígale a Supervisor que está haciendo esto intencionalmente.
(en /etc/supervisor/supervisord.conf
)
[supervisord]
user = root
Una vez que ejecuta Supervisord como root, establece uid para el usuario que asignó, que es, root. ( #308 )
No importante:
Aunque ahora puedes recibir este mensaje:
CRIT Establecer uid al usuario 0
No se preocupe, este mensaje debe ser un nivel INFO en lugar de un nivel CRIT. ( #693 )
Supervisor se está ejecutando en 3.0:
pip freeze | grep supervisor
supervisor==3.0
Al iniciar supervisord desde la línea de comando:
sudo $VIRTENV/supervisord --nodaemon --configuration $PATH_TO_CONFIG/supervisord.conf
Me sale este error:
2013-11-11 23:30:50,205 CRIT Supervisor running as root (no user in config file)
Pero no puedo empezar a supervisar sin sudo , se queja:
Error: Cannot open an HTTP server: socket.error reported errno.EACCES (13)
¿Cuál es la manera correcta de lidiar con eso?
(Recibo el mismo error si lo inicio como root pero si configuro user = foobar en la sección [supervisor] en supervisord.conf)
Actualización: Aquí está mi supervisor.conf
[unix_http_server]
file = /opt/run/supervisord.sock
[inet_http_server]
port = 9001
username = foobar
password = foobar
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisord]
logfile = /opt/logs/supervisord.log
loglevel = debug
pidfile = /opt/run/supervisord.pid
[supervisorctl]
[program:foo1]
user = foobar
autostart = True
autorestart = True
command = foo1
stdout_logfile = /opt/logs/foo1.stdout.log
stderr_logfile = /opt/logs/foo1.stderr.log
stdout_logfile_maxbytes = 10MB
stderr_logfile_maxbytes = 10MB
[program:foo2]
user = foobar
autostart = true
autorestart = true
command = foo2
priority = 100
stdout_logfile_backups = 0
stderr_logfile_backups = 0
stdout_logfile_maxbytes = 10MB
stderr_logfile_maxbytes = 10MB
stdout_logfile = /opt/logs/foo2.stdout.log
stderr_logfile = /opt/logs/foo2.stderr.log
Cuando inicia el supervisor como root, debe especificar un usuario para que el supervisor se deje caer por razones de seguridad
De los documentos del supervisor ( http://supervisord.org/configuration.html ):
user
If supervisord is run as the root user, switch users to this UNIX user account before doing any meaningful processing.
This value has no effect if supervisord is not run as root.
Pon esto en tu archivo conf:
[supervisord]
user=nobody
El usuario debe ser un usuario que exista, pero no tiene permisos sudo (nadie puede trabajar).
Para mí, recibí este error mientras corría como un usuario no root:
Error: Cannot open an HTTP server: socket.error reported errno.EACCES (13)
Esto desapareció después de que yo copié el directorio que contenía el archivo del calcetín para ese usuario.
En tu caso:
[unix_http_server]
file = /opt/run/supervisord.sock
Puede usar el chown username /opt/run/
, o apuntar el archivo a otro directorio que sea propiedad del usuario.
Aprendí este enfoque de este link .
Además, mis administradores de sistemas instalaron un script init.d que escribí. La secuencia de comandos init.d se ejecuta como root, pero la secuencia de comandos puede hacer que el supervisor se inicie en myuser
con este comando:
SUPERVISORD=/path/to/supervisord
PIDFILE=/path/to/supervisord.pid
OPTIONS=''-c /path/to/supervisord.conf''
daemon --pidfile=$PIDFILE --user=myuser $SUPERVISORD $OPTIONS
Supervisord cambia a la cuenta de usuario UNIX antes de cualquier procesamiento.
Debe especificar qué tipo de cuenta de usuario debería usar, ejecutar el daemon como root pero especificar el usuario en el archivo de configuración
Ejemplo:
[program:myprogram]
command=gunicorn --worker-class socketio.sgunicorn.GeventSocketIOWorker app.wsgi:application -b 127.0.0.1:8000
directory=/opt/myprogram
user=user1
autostart=true
autorestart=true
redirect_stderr=True
Visite http://supervisord.org/configuration.html#program-x-section-values para obtener más información