Jeweils nur einen Eintrag im Incron-Job zulassen?

Jeweils nur einen Eintrag im Incron-Job zulassen?

Ich muss ein Verzeichnis überwachen. Wenn es aktualisiert wird, führe ich einen Befehl über incron aus. Wenn mehrere Dateien in dieses Verzeichnis kopiert werden, führt incron mehrere Befehle gleichzeitig aus. Gibt es eine Möglichkeit, dass, wenn ein Job von incron ausgeführt wird, der zweite Job nicht ausgeführt wird? Ich habedieses Tutorialzur Führung.

Antwort1

Nein, incron verfügt nicht über eine integrierte Sperrfunktion. Wenn Sie verhindern möchten, dass mehrere Jobs gleichzeitig ausgeführt werden, tun Sie dies innerhalb des Jobs.

Wenn Sie einen Job verzögern möchten, bis die vorherigen abgeschlossen sind, lassen Sie sie sperren. Sie können dieflockBefehl. Beispiele finden Sie auf der Manpage.

Wenn Sie einen Job überspringen möchten, da der vorherige noch nicht abgeschlossen ist, können Sie trotzdem verwenden flock, allerdings mit einem Timeout von 0. Wenn Sie die Sperre nicht erhalten können, beenden Sie den Job. Beachten Sie, dass dies anfällig für einen Race Condition ist: Es könnte passieren, dass eine neue Datei kopiert wird, kurz nachdem Job Nr. 1 mit der Aufzählung der Dateien fertig war, aber bevor er Zeit hatte, die Sperre freizugeben, und Job Nr. 2 würde sehen, dass die Sperre noch besteht, und den Job beenden, ohne die Datei zu verarbeiten. Es gibt keine einfache Möglichkeit, diesen Race Condition zu lösen.

Antwort2

Ein einfachstes Lösungsbeispiel: Angenommen, 1 bedeutet, dass die Datei gesperrt ist (das vorherige Skript wird bereits ausgeführt) und 0 bedeutet, dass sie entsperrt ist (kein Prozess wird ausgeführt).

Hier ist der Code

    state=`cat /tmp/my_lck`
    if [ "$state" -eq 1 ];then
        echo "Already executing!!!"
        exit
    else
        #Lock the file
        echo 1 > /tmp/nws_lck

       #Put you code here  

 #Unlock    
        echo 0 > /tmp/nws_lck

    fi

verwandte Informationen