web-dev-qa-db-fra.com

Démarrage de Supervisord en tant que root ou non?

Le superviseur fonctionne sur 3.0:

pip freeze | grep supervisor
supervisor==3.0

Lors du démarrage de supervisord à partir de la ligne de commande:

Sudo $VIRTENV/supervisord --nodaemon --configuration $PATH_TO_CONFIG/supervisord.conf

Je reçois cette erreur:

2013-11-11 23:30:50,205 CRIT Supervisor running as root (no user in config file)

Mais je ne peux pas démarrer supervord sans Sudo, il se plaint:

Error: Cannot open an HTTP server: socket.error reported errno.EACCES (13)

Quelle est la bonne façon d'y faire face?

(J'obtiens la même erreur si je le démarre en tant que root mais en définissant user = foobar sous la section [supervisord] dans supervisord.conf)

Mise à jour: Voici mon supervisord.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
33
kev

Supervisord passe au compte utilisateur UNIX avant tout traitement.

Vous devez spécifier le type de compte utilisateur qu'il doit utiliser, exécuter le démon en tant que root mais spécifier l'utilisateur dans le fichier de configuration

Exemple:

[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

Visitez http://supervisord.org/configuration.html#program-x-section-values pour plus d'informations

24
Jan Vorcak

Lorsque vous démarrez le superviseur en tant que root, vous devez spécifier un utilisateur vers lequel le superviseur doit se rendre pour des raisons de sécurité

Depuis les documents du superviseur ( 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.

Mettez ceci dans votre fichier conf:

[supervisord]
user=nobody

L'utilisateur doit être un utilisateur qui existe, mais ne dispose pas des autorisations Sudo (personne ne peut travailler).

13
Rylan

Pour moi, j'ai reçu cette erreur lors de l'exécution en tant qu'utilisateur non root:

Error: Cannot open an HTTP server: socket.error reported errno.EACCES (13)

Cela a disparu après avoir chowné le répertoire contenant le fichier de chaussette à cet utilisateur.

Dans ton cas:

[unix_http_server]
file = /opt/run/supervisord.sock

Non plus chown username /opt/run/, ou pointez le fichier vers un autre répertoire appartenant à l'utilisateur.

J'ai appris cette approche de cette lien .


De plus, mes administrateurs système ont installé un script init.d que j'ai écrit. Le script init.d est exécuté en tant que root, mais le script peut amener supervisord à démarrer sur myuser avec cette commande:

SUPERVISORD=/path/to/supervisord
PIDFILE=/path/to/supervisord.pid
OPTIONS='-c /path/to/supervisord.conf'
daemon --pidfile=$PIDFILE --user=myuser $SUPERVISORD $OPTIONS
9
Matthew Moisen

Vous avez:

À ma connaissance, vous avez reçu ce message CRIT qui vous dérange:

CRIT Supervisor s'exécutant en tant que root (aucun utilisateur dans le fichier de configuration)

Les mots entre parenthèses sont un indice. Ce message indique que vous exécutez peut-être Supervisor en tant que root involontairement .

Faites ceci:

La solution est donc assez simple: dites au superviseur que vous faites cela intentionnellement.
(dans /etc/supervisor/supervisord.conf)

[supervisord]
user = root

Une fois que vous exécutez Supervisord en tant que root, il définit uid pour l'utilisateur que vous avez affecté, qui est root. ( # 308 )

Pas important:

Bien que vous puissiez maintenant obtenir ce message:

CRIT Définissez uid sur l'utilisateur 0

Pas de soucis, ce message devrait être un niveau INFO plutôt qu'un niveau CRIT. ( # 69 )

8
Kyan