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).
Meine bevorzugte Methode, und wohl die einfachste, verwendet screen
:
Sie müssen stdout, stderr, stdin schließen, ansonsten sind Sie immer noch an dieses spezielle TTY gebunden.
%Vor%Dies sollte den Trick machen.
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.
Das ist das, was ich für mein Sendmail-Filterprogramm benutze und wahrscheinlich den einfachsten Weg. Das Modul ist über CPAN verfügbar.
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.
Tags und Links unix