Wie kann ich ein Unix-Programm im Hintergrund laufen lassen, selbst wenn ich mich auslogge?

7

Ich möchte ein Perl-Skript mit einer while (1) -Schleife im Hintergrund auf einer Unix-Maschine laufen lassen, bis ich es töte.

Dies ist ein Remote-Computer, für den ich keine administrativen Berechtigungen habe (aus irgendeinem Grund kann ich Daemon :: Generic :: While1 nicht verwenden), ich melde mich über SSH an und möchte, dass es weitergeht zu laufen, nachdem ich mich abgemeldet habe.

Eine Möglichkeit, wie ich herausgefunden habe, ist, etwas wie bash zu schreiben:

%Vor%

Gibt es einen anderen, vorzuziehenden Weg?

Bearbeiten der Crontab ist auf diesem Computer verboten (während Hintergrund und lang anhaltende Prozesse nicht ausgeführt wird).

    
Karel Bílek 29.09.2009, 23:42
quelle

6 Antworten

17

Meine bevorzugte Methode, und wohl die einfachste, verwendet screen :

%Vor%     
Yuval Adam 05.09.2011, 19:19
quelle
6

Sie müssen stdout, stderr, stdin schließen, ansonsten sind Sie immer noch an dieses spezielle TTY gebunden.

%Vor%

Dies sollte den Trick machen.

    
user224579 30.09.2009 00:58
quelle
1

Ich glaube, das sollte in Ihrem Perl-Skript funktionieren.

%Vor%

Beachten Sie, dass die Manpage doc für nohup sagt:

  

Um dies zu tun, setzt nohup den SIGHUP   Signal (3) ('' terminal line hangup '')   ignoriert werden, führt dann Dienstprogramm aus   zusammen mit irgendwelchen Argumenten.

    
Taylor Leese 29.09.2009 23:49
quelle
1

Snippet ist in perldoc perlipc:

%Vor%

Aber ich bin mir nicht sicher, ob setsid funktioniert, wenn du nicht root bist. Wenn nicht, versuchen Sie, nach dem Schließen der Standard-Handles doppelt zu verzweigen.

einige Links: howto , daemonize

    
artur-pub 30.09.2009 00:08
quelle
1
%Vor%

Das ist das, was ich für mein Sendmail-Filterprogramm benutze und wahrscheinlich den einfachsten Weg. Das Modul ist über CPAN verfügbar.

    
John Cavan 30.09.2009 00:11
quelle
0

Das Ausführen des Jobs im Hintergrund von der Shell aus ist in Ordnung, abhängig davon, wie viel manuelle Arbeit Sie in die Gewährleistung der kontinuierlichen Ausführung investieren möchten.

Ich würde Crontabs @ Reboot (und möglicherweise auch eine regelmäßige Überprüfung) verwenden. Aber dann müssen Sie berücksichtigen, dass der Prozess möglicherweise mehrmals gestartet wird. Der einfachste Weg, dies zu umgehen, ist eine Sperrdatei. Wenn die Datei gesperrt ist, beenden Sie, andernfalls fahren Sie mit der Aufgabe fort. Denken Sie daran, nicht blockierende Prüfungen zu verwenden, sonst riskieren Sie unnötige Systemressourcen mit toten Prozessen.

Bildschirm ist auch eine Option, wenn es verfügbar ist.

crontab + Bildschirm kann kombiniert werden.

    
tommym 29.09.2009 23:49
quelle

Tags und Links