true supervisorctl such stdout_logfile socket sock run nodaemon new error python startup supervisord

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