gnude
Anmeldungsdatum: 11. Juli 2014
Beiträge: 843
|
Hallo
ich habe ein Perl Script das auf dem Bildschirm eine Ausgabe erzeugt.
Nun möchte ich dieses Script allerdings im Hintergrund starten so das
es im Shellscript sofort weiter geht und die Ausgabe unterdrücken bzw. sie soll
nicht angezeigt werden.
Beispiel:
#!/bin/bash
cd /test
perl /test/perl.pl 123 &
echo "weiter gehts hier ..." Das Script wird mit einem Parameter aufgerufen. Ich habe schon wie im Beispiel zu sehen ist
versucht ein & dahiner zu hängen um es in den Hintergrund zu schrieben was aber nicht geklappt hat.
wie kann ich das perl script im Hintergrund starten?
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Wo legst Du denn Dein Skript ab ?? - unter /test/ - also irgendwo direkt unter Root ? Das ist ein etwas eigenwilliger Ort. Normalerweise würde man sowas nämlich unter seinem eigenen Home-Verzeichnis ablegen, also typischerweise unter /home/gnude/bin/ ... Das hat ganz nebenbei noch den Vorteil, dass es nach dem nächsten Anmelden direkt automatisch mit im Suchpfad aufgenommen wird, dass Du das Skript also direkt mit seinem Namen perl.pl 123 aufrufen kannst. (klar: Du musst das Skript natürlich vorher "ausführbar" machen, und der Shebang muss auch korrekt sein) Ansonsten ist das schon ganz richtig, mit dem & dahinter: das sollte jedenfalls klappen. Und wenn Du dann noch die Ausgabe des Skripts ins Nirvana schicken willst, leitest Du sie einfach dorthin um: | perl /test/perl.pl 123 > /dev/null &
|
Ich sehe also im Moment keinen Grund, weshalb das bei Dir nicht klappen sollte. Vielleicht verrätst Du noch etwas mehr zu dem Perl-Skript ? (nicht das da noch eine Tücke liegt, die ich nicht auf dem Schirm habe) LG, track
|
gnude
(Themenstarter)
Anmeldungsdatum: 11. Juli 2014
Beiträge: 843
|
Das ist nen relativ langes Script das ne Datenbank befüllt.
Ich hab es wie beschrieben ausprobiert. Im Hintergrund landet es bereits
aber es produziert munter weiter ausgaben....
gibt es nen Perl Parameter was ein Script stumm schaltet?
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11243
Wohnort: München
|
gnude schrieb: Ich hab es wie beschrieben ausprobiert. Im Hintergrund landet es bereits
aber es produziert munter weiter ausgaben....
Das Beispiel von track leitet ja nur stdout um, stderr kannst du ebenfalls umleiten - lies am besten mal Shell/Umleitungen, damit du den Zusammenhang verstehst:
| perl /test/perl.pl 123 > /dev/null 2>&1 &
|
gibt es nen Perl Parameter was ein Script stumm schaltet?
Nein, dazu müsstest du dir das Skript ansehen und herausfinden, wer da die Meldungen produziert.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13166
|
gnude schrieb:
Das Script wird mit einem Parameter aufgerufen. Ich habe schon wie im Beispiel zu sehen ist
versucht ein & dahiner zu hängen um es in den Hintergrund zu schrieben was aber nicht geklappt hat.
Was genau bedeutet das? Was hat nicht geklappt?
wie kann ich das perl script im Hintergrund starten?
Genau so, wie Du es gemacht hast plus die Umleitungen für die Unterdrückung der Ausgabe. Ich würde auch noch Stdin schließen: | #!/bin/sh
cd /test
perl /test/perl.pl 123 >/dev/null 2>&1 0<&- &
bg_pid=$!
echo "weiter gehts hier ..."
kill -TERM $bg_pid
|
Anmerkungen
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17599
Wohnort: Berlin
|
rklm schrieb: | #!/bin/sh
cd /test
perl /test/perl.pl 123 >/dev/null 2>&1 0<&- &
bg_pid=$!
echo "weiter gehts hier ..."
kill -TERM $bg_pid
|
Anmerkungen
Killt das nicht das Perlscript, wenn es länger dauert, als das echo Weiter gehts hier ... immer?
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11243
Wohnort: München
|
Ich verstehe das sowie so nicht, warum man das Skript in den Hintergrund schicken muss - wenn das ein lang laufender Prozess ist, kann man das wunderbar mit Upstart bzw. Systemd (ab Ubuntu 16.04) starten, dann braucht man den Shell-Zirkus drum herum erst gar nicht und das Logging ist einfacher.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13166
|
user_unknown schrieb: rklm schrieb: [...]
Killt das nicht das Perlscript, wenn es länger dauert, als das echo Weiter gehts hier ... immer?
In diesem Skript ja. Aber ich hatte angenommen, dass längere Aktivitäten dort hingehören, wo das echo steht, und wollte zeigen, wie man dann sicherstellt, dass der Prozess gekillt wird, wenn das Skript terminiert. Ist natürlich spekulativ, aber warum sollte man etwas im Hintergrund ausführen, wenn man nicht im Vordergrund weiter arbeiten möchte? Man kann natürlich auch umgekehrt mit wait darauf warten, dass der Kindprozess fertig ist, bevor man das Skript verlässt. Hängt halt davon ab, was man will. Wir wissen ja nicht viel...
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17599
Wohnort: Berlin
|
rklm schrieb: aber warum sollte man etwas im Hintergrund ausführen, wenn man nicht im Vordergrund weiter arbeiten möchte?
Es ist ja klar, dass er im Vordergrund währenddessen weiterarbeiten will. Man will das, weil man 2 Dinge gleichzeitig bearbeiten will, bei denen das zweite nicht auf das erste warten muss, um zu arbeiten, aber das 1. doch fertig gearbeitet werden soll. Aber gut - während man die Arbeit 2 erledigt lässt man vielleicht Musik mitlaufen (1) und wenn sie aus geht, merkt man so, dass Arbeit 2 fertig ist.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13166
|
user_unknown schrieb: rklm schrieb: aber warum sollte man etwas im Hintergrund ausführen, wenn man nicht im Vordergrund weiter arbeiten möchte?
Ich habe da ein "sonst" vergessen: das sollte heißen "aber warum sollte man sonst etwas im Hintergrund ausführen, wenn man nicht im Vordergrund weiter arbeiten möchte?". Mit anderen Worten, ich habe genau so geschlossen wie Du:
Es ist ja klar, dass er im Vordergrund währenddessen weiterarbeiten will. Man will das, weil man 2 Dinge gleichzeitig bearbeiten will, bei denen das zweite nicht auf das erste warten muss, um zu arbeiten, aber das 1. doch fertig gearbeitet werden soll.
Wobei ich noch ergänzen würde, dass das eigentlich klar ist, aber der OP sich darüber ausschweigt. Wir wissen es also nicht wirklich.
|