Ausführen von shell-Skript mit system() gibt 256. Was bedeutet das?
Ich geschrieben habe ein shell-Skript, um die weichen neu zu starten HAProxy (reverse proxy). Das Skript aus der shell funktioniert. Aber ich will ein daemon, der das Skript ausführen. Das funktioniert aber nicht. system()
gibt 256. Ich habe keine Ahnung, was das bedeuten könnte.
#!/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 ist ausgeführt mit user haproxy. Mein Dämon hat seine eigenen Benutzer zu. Beide laufen mit sudo.
Irgendwelche Tipps?
InformationsquelleAutor Jan Deinhard | 2010-09-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Laut diese und dass, Perl -
system()
gibt exit-Werte multipliziert mit 256. Es ist also tatsächlich beenden mit1
. Es scheint dies geschieht in C zu.Perl nicht zurück, multipliziert exit-Werte. Es gibt eine 16-bit-Wert, mit der exit-code in den höheren 8 bits. Es ist oft das gleiche, aber nicht immer.
Dies gilt auch für die meisten Linux/gcc-binaries, nicht nur Perl.
InformationsquelleAutor Skilldrick
Kein system gibt -1 zurück, Ihr Rückgabewert ist vom gleichen format wie der Wert des status von wait-Familie von system-aufrufen (man 2 wait). Es gibt Makros helfen Ihnen bei der Interpretation dieser status:
Listet diese Makros und was Sie sagen.
InformationsquelleAutor nategoose
Einen code von 256 bedeutet wahrscheinlich, dass das system den Befehl nicht finden kann die binary ausführen. Denken Sie daran, dass es nicht sein kann, ruft die bash und dass es keine Pfade setup. Versuchen Sie es erneut mit vollen Pfade zu den binaries!
InformationsquelleAutor user2000703
Ich habe das gleiche problem, wenn der Anruf-Skript mit `kill' - Befehl in einen Dämon.
Der daemon muss geschlossen haben, um die stdout, stderr...
Verwenden Sie so etwas wie system("scrips.sh > /dev/null") sollte funktionieren.
InformationsquelleAutor Morris