Linux: Wie kann man einige Jobs im Hintergrund anordnen?

8

Hier ist die Funktionalität, nach der ich suche (und noch nicht ganz gefunden habe):

Ich habe x Prozesse, die ich nacheinander ausführen möchte. Einige von ihnen könnten ziemlich zeitaufwendig sein.

Ich möchte, dass diese Prozesse im Hintergrund meiner Shell ausgeführt werden.

Ich weiß von Nohup, aber es scheint nicht perfekt zu funktionieren ... angenommen Job1 ist ein zeitaufwendiger Job, wenn ich + c aus der Leerzeile drehe, die ich bekomme, nachdem ich nohup job1 & amp; & amp; job2 & amp; & amp; job3 & amp ;, dann werden job2 und job3 nicht ausgeführt, und job1 läuft möglicherweise nicht oder läuft nicht, je nachdem wie lange ich nohup laufen lasse.

Gibt es eine Möglichkeit, die gewünschte Funktionalität zu erhalten? Ich bin ssh'ed in einen Linux-Server. Für Bonuspunkte würde ich es lieben, wenn die Jobs, die ich in die Warteschlange stellte, auch dann weiterlaufen würden, wenn ich meine Verbindung schloss.

Danke für Ihre Hilfe.

EDIT: Ein kleines Addendum zur Frage: Wenn ich ein Shell-Skript mit drei Exec-Anweisungen habe

Exec grandios Exec smallthing exec smallthing

Wird es definitiv sequentiell sein? Und gibt es eine Möglichkeit, diese alle in eine Exec-Zeile einzubinden, um die entsprechende Funktionalität zu erhalten?

dh exec BIGTHING & amp; smallthing & amp; smallthing oder & amp; & amp; oder soetwas

    
A Question Asker 04.01.2011, 15:17
quelle

7 Antworten

11

Verwenden Sie screen .

  1. ssh zum Server
  2. run screen
  3. Starten Sie Ihre Programme: job1;job2;job3 - getrennt durch Semikolon, sie werden nacheinander ausgeführt
  4. Trennen Sie sich vom Bildschirm: CTRL-A , D
  5. Abmeldung vom Server

(später)

  1. ssh zum Server
  2. run screen -r
  3. und Sie befinden sich in Ihrer Shell, während Ihre Jobwarteschlange läuft ...
eumiro 04.01.2011, 15:22
quelle
6

Alternativ, wenn Sie ein bisschen mehr Kontrolle über Ihre Warteschlange haben möchten, z. Die Möglichkeit, Einträge aufzulisten und zu ändern, finden Sie Task Spooler . Es ist in den Ubuntu 12.10 Universe-Repositories als Paket task-spooler verfügbar.

    
tachylatus 07.01.2013 09:13
quelle
2

Ich stimme zu, dass screen ein sehr praktisches Werkzeug ist. Es gibt ein zusätzliches Befehlszeilen-Tool enqueue - mit dem zusätzliche Jobs nach Bedarf in die Warteschlange eingereiht werden können, auch wenn Sie bereits eine gestartet haben der Jobs können Sie ein weiteres hinzufügen, wenn das erste bereits ausgeführt wird.

Hier ist ein Beispiel aus enqueue README:

%Vor%     
myroslav 07.02.2012 23:23
quelle
1

ein wenig mehr Informationen:

Wenn Sie Ihre Jobs mit & amp; & amp; es ist äquivalent zu dem & amp; & amp; und -Operator in einer Programmiersprache, wie etwa in einer if-Anweisung. Wenn Job 1 mit einem Fehler zurückkehrt, wird Job 2 nicht ausgeführt usw. Dies wird "Kurzschließen" genannt. Wenn Sie die Jobs mit trennen; Stattdessen werden sie alle unabhängig vom Rückgabecode ausgeführt.

Wenn Sie die Zeile mit & amp; Es wird Hintergrund die ganze Sache. Wenn Sie dies vergessen, können Sie Strg + Z drücken, um den Befehl anzuhalten und Ihnen eine Eingabeaufforderung zu geben. Dann wird der Befehl "bg" als Hintergrund verwendet.

Wenn Sie Ihre ssh-Sitzung schließen, beendet sie wahrscheinlich die Befehle, weil sie an Ihre Shell angehängt sind (zumindest in den meisten Bash-Implementierungen). Wenn Sie möchten, dass es nach dem Abmelden fortgesetzt wird, verwenden Sie den Befehl "disown".

    
rbrc 06.05.2014 19:38
quelle
0

Setzen Sie nach Ihrem Befehl ein & amp;

zum Beispiel Ausführen einer ausführbaren Datei mit dem Namen foo:

%Vor%

und es wird auch dann weiter ausgeführt, wenn Sie Ihre ssh-Verbindung schließen.

    
yossi 04.01.2011 15:20
quelle
0

Der grundlegende Mechanismus für den Hintergrund eines Jobs von der Shell ist

%Vor%

Sie könnten also ein einfaches Shell-Skript erstellen, das es sequentiell für mehrere von ihnen ausführt, obwohl ich zu diesem Zeitpunkt erwägen würde, in eine Skriptsprache wie Perl oder Python einzutauchen und ein einfaches Skript zu schreiben, um diese Prozesse zu verzweigen. Wenn sich Ihr Skript selbst als erster Schritt ausgibt und alle seine Aufgaben in der fork ausführt, gibt es sofort die Kontrolle an die Shell zurück und läuft weiter, selbst wenn Sie sich ausloggen.

    
Arne Claassen 04.01.2011 15:26
quelle
0

Um es im Hintergrund von der Shell zu lösen (Aufgaben, die nur mit & im Hintergrund stehen, unterliegen Shell-Spielen), benutze

Seidid foo

    
user562374 04.01.2011 15:36
quelle

Tags und Links