2013-11-27 4 views
37

Ich möchte mein Skript im Hintergrund ausführen und dann seine PID-Datei schreiben. Ich benutze Nohup dafür.Wie nohup laufen und schreiben Sie seine PID-Datei in einer einzigen Bash-Anweisung

Das ist, was ich mit, gibt

nohup ./myprogram.sh > /dev/null 2>&1 & && echo $! > run.pid 

kam Aber dies einen Syntaxfehler.

Das Folgende gibt keinen Syntaxfehler, aber das Problem ist echo $! nicht die richtige pid schreiben, da nohup in einer Unterschale ausgeführt wird

(nohup ./myprogram.sh > /dev/null 2>&1 &) && echo $! > run.pid 

Irgendwelche Lösungen für diese, da ich nur eine einzige Zeile Aussage will dies zu erreichen?

+4

Das '&' ist ein Befehlsabschlusszeichen, ähnlich wie ';' oder '\ n'. Deshalb ist '& &&' ein Syntaxfehler. – joeytwiddle

+2

Ich habe das versucht, aber es gab mir die falsche PID. Ich frage mich, was ich falsch mache? –

Antwort

78

Sie bereits eine kaufmännische Und nach der Umleitung hast, die im Hintergrund das Skript setzt. Daher müssen Sie nur den gewünschten Befehl nach dem kaufmännischen Und ohne weiteres vorangestelltes eingeben:

nohup ./myprogram.sh > /dev/null 2>&1 & echo $! > run.pid 
+2

versuchte dies, aber eine Pidfile, die 1 Prozess aus irgendeinem seltsamen Grund zurück ist. Wenn also die PID-Datei 123 sagt, ist die tatsächliche Prozess-ID 124. Irgendwelche Ideen? – Allen

+3

@Allen, weil Nohup Gabeln und ein neuer Prozess für den eigentlichen Befehl erstellt wird. Und manchmal ist das möglicherweise nicht das genaue nächste pid, z.B. während starker Abzweigungen anderer Prozesse. – akostadinov

+0

@Grigor Yosifov, in dem Befehl was ist der Zweck von: 2> & 1? – Zubair

13

sollte diese Arbeit:

nohup ./myprogram.sh > /dev/null 2>&1 & 
echo $! > run.pid 
+0

Aber das verwendet mehrere Zeilen. Kann ich das nicht mit einer einzigen Zeile machen? – amitkarmakar

+3

Ja, die Zeilenschaltung ist optional. – joeytwiddle

+6

@ amit.codename13: Ja, natürlich kann man es wie 'nohup ./myprogram.sh>/dev/null 2> & 1 & echo $! > run.pid' Ich habe es nur in zwei Zeilen platziert, um nur den Zweck zu verstehen. – anubhava

Verwandte Themen