J'ai écrit un script Shell pour redémarrer HAProxy (proxy inverse). L'exécution du script à partir du shell fonctionne. Mais je veux un démon pour exécuter le script. Ça ne marche pas. system()
renvoie 256. Je ne vois pas ce que cela pourrait vouloir dire.
#!/bin/sh
# save previous state
mv /home/haproxy/haproxy.cfg /home/haproxy/haproxy.cfg.old
mv /var/run/haproxy.pid /var/run/haproxy.pid.old
cp /tmp/haproxy.cfg.new /home/haproxy/haproxy.cfg
kill -TTOU $(cat /var/run/haproxy.pid.old)
if haproxy -p /var/run/haproxy.pid -f /home/haproxy/haproxy.cfg; then
kill -USR1 $(cat /var/run/haproxy.pid.old)
rm -f /var/run/haproxy.pid.old
exit 1
else
kill -TTIN $(cat /var/run/haproxy.pid.old)
rm -f /var/run/haproxy.pid
mv /var/run/haproxy.pid.old /var/run/haproxy.pid
mv /home/haproxy/haproxy.cfg /home/haproxy/haproxy.cfg.err
mv /home/haproxy/haproxy.cfg.old /home/haproxy/haproxy.cfg
exit 0
fi
HAProxy est exécuté avec l'utilisateur haproxy. Mon démon a aussi son propre utilisateur. Les deux courent avec Sudo.
Des allusions?
Selon this et that , system()
de Perl renvoie les valeurs de sortie multipliées par 256. Il s’agit donc de quitter avec 1
. Il semble que cela se produit aussi dans C .
À moins que le système ne retourne -1, sa valeur de retour est du même format que la valeur de statut de la famille d'appels en attente (man 2 wait). Il existe des macros pour vous aider à interpréter ce statut:
man 3 wait
Répertorie ces macros et ce qu'elles vous disent.
Un code de 256 signifie probablement que la commande système ne peut pas localiser le binaire pour l'exécuter. Rappelez-vous qu’il n’appelle peut-être pas bash et que les chemins ne sont pas configurés. Réessayez avec des chemins complets vers les fichiers binaires!
J'ai le même problème quand un script d'appel contenant la commande "kill" dans un démon. Le démon doit avoir fermé le stdout, stderr ... Utiliser quelque chose comme système ("scrips.sh>/dev/null ") devrait fonctionner.