Ich springe gerade in Unix aus einer anderen Welt und wollte wissen, ob
while true
do
/someperlscript.pl
done
Das Perl-Skript selbst verfügt intern über eine Ordner- / Dateiüberwachung, die ausgeführt wird, wenn Dateien am Zielspeicherort geändert werden.
Ist das ( while true
) eine gute Idee? Wenn nicht, was ist ein bevorzugter robuster Ansatz?
TIA
EDIT: Da dies einiges an Interesse geweckt zu haben scheint, ist hier das komplette Szenario. Das Perl-Skript selbst überwacht ein Verzeichnis mithilfe eines Dateiüberwachungsprogramms. Beim Empfang neuer Dateien (sie kommen über rsync an), nimmt es die neue und verarbeitet sie. Jetzt sind die eingehenden Dateien möglicherweise beschädigt (fragen Sie nicht nach .., die von einem Himbeer-Pi stammen), und manchmal ist der Prozess möglicherweise nicht in der Lage, damit umzugehen. Ich weiß nicht genau warum, da uns noch nicht alle Szenarien bekannt sind.
ABER - wenn der Prozess aus irgendeinem Grund fehlschlägt, soll er aktiv sein und die nächste Datei verarbeiten, da die nächste Datei nicht mit der vorherigen Datei zusammenhängt, die den Fehler verursacht haben könnte.
Normalerweise hätte ich irgendeine Art von catch all benutzt und den gesamten Code darum gewickelt, damit er NIEMALS abstürzt. War mir aber für Perl nicht sicher.
Soweit ich weiß, ist die Verwendung von Supervisord ein guter Ansatz dafür.
inotify
API überprüfen , um zu vermeiden, dass eine Besetztschleife darauf wartet, dass Dateien in Ihrem Zielverzeichnis geändert werden.