Départ supervisord en tant que root ou pas?
Superviseur est en cours d'exécution 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
J'obtiens cette erreur:
2013-11-11 23:30:50,205 CRIT Supervisor running as root (no user in config file)
Mais je ne peux pas commencer à supervisord sans sudo, il se plaint:
Error: Cannot open an HTTP server: socket.error reported errno.EACCES (13)
Quelle est la bonne façon de traiter avec elle?
(Je reçois le même message d'erreur si le démarrage en tant que root mais la définition d'utilisateur = foobar en vertu de la [supervisord] section 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
- Êtes-vous sûr que vous voulez démarrer une autre copie de la
supervisord
démon, plutôt que de courirsupervisorctl
ou quelque chose? Qu'est-ce exactement que vous essayez de faire ici? - Je n'essayez pas de démarrer plusieurs copies de supervisord, juste un. Comme je l'ai écrit, je suis confus. Départ supervisord en tant que root me donne un CRIT, mais je ne peux pas le démarrer en tant que non-root.
- Fonctionne lorsque vous retirez le [inet_http_server] l'article?
- Je me demandais la même chose. La doc n'est pas claire sur cette question et de voir l'erreur CRITIQUE me fait me demander si elle n'est pas mieux pour exécuter un superviseur avec un superviseur de l'utilisateur créé à cet effet. Qu'avez-vous de faire? Merci.
- TL;DR set
user=root
danssupervisord.conf
. (Explication)
Vous devez vous connecter pour publier un commentaire.
Supervisord commutateurs de compte d'utilisateur UNIX avant tout traitement.
Vous devez spécifier quel type de compte d'utilisateur, il est recommandé d'utiliser, exécuter le démon en tant que root, mais spécifier l'utilisateur dans le fichier de configuration
Exemple:
Visite http://supervisord.org/configuration.html#program-x-section-values pour plus d'informations
Lorsque vous démarrez superviseur en tant que root, vous devez spécifier un superviseur de l'utilisateur de tomber pour des raisons de sécurité
Du superviseur docs (http://supervisord.org/configuration.html):
Mettre ceci dans votre fichier conf:
L'utilisateur est un utilisateur qui existe, mais n'a pas de sudo autorisations (personne ne peut travailler).
logfile=/path/to/logfile
pour spécifier le répertoire pour enregistrer les fichiers de log, et assurez-vous que l'utilisateur que vous goutte à a la permission d'écrire dans ce répertoire. Vous aussi n'avez pas besoin de déposer à la personne, vous pouvez le déposer à ubuntu ou un autre utilisateur.D /run/supervisord 0700 nobody nobody
user=nobody
ligne et devez le supprimer.Pour moi, j'ai reçu ce message d'erreur lors de l'exécution comme un utilisateur non-root:
C'est allé loin après je chowned le répertoire de la tenue de la chaussette de fichier à l'utilisateur.
Dans votre cas:
Soit
chown username /opt/run/
, ou pointez le fichier dans un autre répertoire que le propriétaire est l'utilisateur.J'ai appris cette approche à partir de ce lien.
De plus, mes administrateurs système installé un init.d script que j'ai écrit. L'init.d script est exécuté en tant que root, mais le script peut obtenir supervisord pour démarrer sur
myuser
avec cette commande:Que vous avez:
Par ma compréhension, vous avez obtenu ce CRIT message qui vous tracasse:
Les mots entre parenthèses est un indice. Ce message indique que vous exécutez peut-être Superviseur en tant que root involontairement.
Ce faire:
Donc la solution est assez simple: Dites au Superviseur que vous faites cela intentionnellement.
(en
/etc/supervisor/supervisord.conf
)Une fois que vous exécutez Supervisord en tant que root, il fixe uid de l'utilisateur que vous avez assignée, qui est, de la racine. (#308)
Pas important:
Bien que maintenant vous pouvez obtenir ce message:
Pas de soucis, ce message doit être d'un niveau de l'INFO plutôt que d'un CRIT niveau.
(#693)