Ich habe ein Startskript, das einen benutzerdefinierten Anlegeserver startet. Wenn ich es tue sudo start [myservice]
, passiert nichts. Anschließend sudo status [myservice]
zeigen sie , wie: [myservice] start/killed, process 3586
.
Hier ist das Skript in /etc/init/[myservice‹.conf:
description "[description]"
author "[my name and email]"
start on runlevel [2345]
stop on runlevel [016]
respawn
expect fork
script
sudo -u www-data /path/to/grafserv-start.sh >> /tmp/upstart.log 2>&1
end-script
Und hier ist grafserv-start.sh
:
#!/bin/bash
/usr/bin/java -Djetty.port=3070 -jar /path/to/grafserv/trunk/start.jar
echo "Done starting GrafServ"
Ich habe versucht, die Ausgabe des Skriptbefehls in eine tmp-Protokolldatei umzuleiten, aber diese Datei wird nie erstellt. Wenn ich anfange, bekomme ich nur einen Hang, bis ich ^ C. Ich habe auch versucht, es mit Strace zu betreiben, aber das gab mir eine Menge Zeug über Steckdosen.
Antworten:
... bleibt hängen, wenn Sie zur Eingabe eines Kennworts aufgefordert werden. Haben Sie überprüft, ob der Benutzer, auf dem das "Startskript" ausgeführt wird, über die Berechtigung von sudoers verfügt, dies zu tun?
quelle
-n
sudo hinzufügen , damit es mit einem Fehler beendet wird, anstatt auf das Passwort zu warten.Ich denke, es gibt drei mögliche Probleme:
Sie
expect fork
sind falsch, weil Ihr Programm nicht wirklich gabelt. Dies ist wahrscheinlich nicht der Fall, da Sie ein Skript verwenden, aber Sie möchten es vielleicht versuchenexpect daemon
oder gar nicht erwarten.Ihr Java-Programm wechselt nicht in den Daemon-Modus und muss daher in den Hintergrund gestellt werden. Mit anderen Worten, Sie brauchen
&
am Ende eine:sudo -u www-data /path/to/grafserv-start.sh >> /tmp/upstart.log 2>&1
&
Ihr Upstart ist in einem schlechten Zustand. Ich weiß nicht genau, wie es passiert, aber Sie können in einem Zustand neu starten, in dem das Skript auch dann noch hängen bleibt, wenn Sie es korrekt bearbeiten. Benennen Sie in diesem Fall die Datei um (dh
/etc/init/[myservice]-1.conf
versuchen Sie, sie zu starten, bis sie nicht mehr hängt. Wenn Sie das Skript richtig ausgeführt haben, benennen Sie die Datei in den richtigen Namen um und starten Sie das System neu.quelle
Ich denke, Sie haben den Exec vor Ihrem Skript im Emporkömmling verpasst ... Ich denke, es ist notwendig. Versuche dies:
exec sudo -u www-data /path/to/grafserv-start.sh >> /tmp/upstart.log 2>&1
Wie Bittrance bereits sagte, möchten Sie möglicherweise auch sicherstellen, dass Ihr Java-Programm im Hintergrund ausgeführt wird. Versuchen Sie, ein
&
oder etwas an das Ende des Befehls in Ihrem Skript anzuhängen, wenn Ihr Java-Programm keine Logik enthält, die es als Hintergrundprozess oder Daemon ausführt.quelle