Wie startet und hält man einen Prozess am Laufen, auch nachdem das Terminal geschlossen wurde?

Hallo,

ich muss einen Prozess in meinem Terminal ausführen, der mit meinem QNAP TS-131P NAS verbunden ist. Das Problem ist: Wenn ich mein Terminalfenster schließe, wird der Prozess natürlich beendet. Ich habe alle Methoden ausprobiert, die in dieser Nachricht vorgeschlagen wurden, aber keine davon funktioniert, da die benötigten Tools auf dem NAS nicht installiert sind (z. B. nohup, screen, tmux fehlen alle)…

Ich stecke also in einer Sackgasse… Wie kann ich einen Prozess starten und am Laufen halten, auch nachdem ich das Terminal auf meinem QNAP NAS geschlossen habe?

Vielen Dank.

Ist nohup hier nicht enthalten?

https://www.myqnap.org/product/entware-std/

Bist du sicher? Ich habe SSH-Sitzungen verlassen (nicht ausgeloggt, nur das Fenster geschlossen) und dachte, der Prozess läuft weiter. Ich könnte mich irren, ich weiß, dass das bei einem anderen NAS einer anderen Marke, das ich auch habe, der Fall ist.

Ist das eine regelmäßige Aufgabe, die du ausführst? Könntest du sie stattdessen in die systemweite Crontab aufnehmen, anstatt sie manuell auszuführen?
Hast du auch versucht, sie im Hintergrund laufen zu lassen und sie zu „disownen“?

https://www.reddit.com/r/linuxquestions/comments/ypkcj6/terminal_how_do_i_run_a_command_send_it_to_the/

Könnte der Auftrag in einem Container ausgeführt werden?

GNU screen ist in QTS enthalten. Verwenden Sie es. :nerd_face:

Ist nohup nicht dabei?

Danke. Ich habe das Entware-Std qpkg installiert und nohup eingegeben, aber es war nicht enthalten. Allerdings ist tmux enthalten, und ich denke, das wird funktionieren :slightly_smiling_face:

Danke. Wie ich in meiner ursprünglichen Nachricht gesagt habe, ist es auf meinem QNAP NAS nicht enthalten. Wenn ich screen eingebe, erhalte ich die Fehlermeldung „Befehl nicht gefunden“. Allerdings habe ich es geschafft, tmux zu installieren, und das sollte mein Problem lösen.

Ja, sie muss rund um die Uhr im Hintergrund laufen. Es handelt sich um ein Skript, das alle 15 Minuten einen Server abfragt, um eine Verbindung aufrechtzuerhalten. Es ist ein Bash-Skript, das die Port-Weiterleitungsfunktionalität eines VPN-Servers am Leben hält, und wurde von einer VPN-Serverfirma bereitgestellt.

Nein, weil ich die anfängliche Ausgabe des Bash-Skripts benötige, da es die vom entfernten VPN-Server zugewiesene Portnummer zurückgibt. Der Crontab liefert keine Ausgabe des Skripts, sondern führt es einfach aus. Außerdem gibt das Skript jedes Mal, wenn es ausgeführt wird, eine neue Portnummer zurück, und ich müsste die Portnummer in meiner Endpunkt-Anwendung jedes Mal entsprechend ändern (was nicht praktikabel wäre).

Habe ich nicht, aber ich habe diese Seite, die du gegeben hast, als Lesezeichen gespeichert. Falls nötig, werde ich es mir anschauen. Ich konnte Entware-Std installieren, das mit tmux ausgeliefert wird. Ich probiere es gerade aus und es scheint endlich zu funktionieren. Vielen Dank.

Danke. Könnte er, aber ich denke, das wird nicht nötig sein, da ich es geschafft habe, Entware-Std (die manuelle qpkg-Installation) zu installieren. Es enthält ein Tool namens tmux, und es scheint mein Skript auch nach dem Schließen des Terminals problemlos auszuführen :wink:

Gut für dich! :smiley:

Wie gesagt, es ist in QTS enthalten.

Bist du über SSH als ursprünglicher Admin-Benutzer angemeldet oder als ein von dir erstellter Benutzer? Wenn du ein sekundäres Konto verwendest, musst du viele Befehle mit sudo ausführen.

Wenn du das Skript korrekt konfigurierst, kann es eine Ausgabe liefern. Ich lasse mehrere Skripte per Cron laufen, die eine Ausgabe in eine Logdatei schreiben und/oder die Ausgabe per E-Mail versenden.

So bin ich immer informiert, wenn sich etwas ändert oder nicht wie erwartet funktioniert.

Gruß

Ich bin als der ursprüngliche Admin-Benutzer eingeloggt.

Danke. Ich behalte diese Option im Hinterkopf, nur für den Fall. Sie könnte nützlich sein.

Sie können das folgende Formular verwenden und erhalten das gleiche Ergebnis wie mit nohup:

bash /share/homes/admin/bin/SCRIPT.sh < /dev/null > /dev/null 2>&1 &

„< /dev/null“ trennt die Konsole für Eingaben vom Bash-Skript
„> /dev/null“ trennt die Konsole für Ausgaben vom Bash-Skript
„2>&1“ trennt die Konsole für Fehlermeldungen vom Bash-Skript
„&“ führt das Skript im Hintergrund aus.
Das ist im Grunde das, was nohup macht.

Ich habe dies auf einem TS-851 QTS 5.2.8.3350 Build 20251216 getestet, den ich besitze.

Hallo und willkommen im Forum. :slight_smile:

nohup und & erfüllen unterschiedliche Funktionen. Sie können sogar zusammen verwendet werden.

Einen Prozess in den Hintergrund zu schicken, stellt nicht sicher, dass er nicht beendet wird, wenn der Benutzer seine Terminal-Sitzung trennt.

Aber es hat funktioniert.

Es kann funktionieren. Es ist jedoch unzuverlässig. :nerd_face:

Hallo, ich hatte große Erwartungen an tmux, aber nach einem Tag funktionierte es nicht mehr. Letzte Woche habe ich nohup installiert und bis heute läuft es ohne Probleme. So bin ich vorgegangen:

  • Entware_1.03std.qpkg installieren
  • nohup mit dem Paketmanager installieren: opkg install coreutils-nohup
  • Das gewünschte Skript ausführen, z. B. nohup ./port_forwarding.sh &
  • Wenn Sie die Ausgabe Ihres Skripts ansehen möchten, führen Sie aus: vi nohup.out

Danach können Sie sich vom Terminal abmelden. Ihr Skript sollte weiterhin ausgeführt werden.

'nohup' ist absolut unnötig! Ich habe es so gemacht:

./$script.sh &
sleep2
disown -h “%$ID”

wobei ID eine Ganzzahl von 1 bis x ist, also
%1 für das erste gestartete Skript,
%2 für das zweite gestartete Skript
und so weiter.