Automatisieren der Ausführung eines Befehls beim Erstellen einer Datei

2

Wie automatisieren den Prozess der Ausführung eines Befehls bei Erstellung einer Datei . Ich habe eine Anwendung, in der ein Tool ein XSD-Schema aus einer XML-Datei generiert. Mein nächstes Modul verwendet dieses xsd-Schema zur weiteren Verarbeitung.
Ich möchte diesen Prozess automatisieren, dh einen Befehl ausführen, sobald die Datei generiert wurde. Diese Anwendung läuft jeden Tag auf Ubuntu-Rechnern, deshalb möchte ich sie automatisieren. Ich möchte kein menschliches Eingreifen in diesen Prozess. Ich habe inotify lib gesucht, das für ähnliche Zwecke verwendet wird, aber es zwingt mich, das gesamte Design meines Systems zu ändern.
Gibt es andere Alternativen, die diesen Zweck lösen könnten? Jede Hilfe wird sehr geschätzt.

user3168180
quelle

Antworten:

0

Herauszufinden, wann die Datei fertig geschrieben ist, ist der schwierige Teil. Verwenden Sie am besten ein Skript wie:

#!/bin/sh
program-that-creates-xsd
program-that-does-further-processing

Es gibt wirklich keine guten Lösungen, wenn Sie Ihr Programm nicht so strukturieren können. Selbst mit inotify ist es fast unmöglich zu sagen, wann die XSD wirklich fertig ist.

msw
quelle
0

Das Ermitteln der Dateierstellung in einem bestimmten Ordner kann über erfolgen, inotifywaitder Teil des inotify-toolsPakets ist, das über installiert werden kann sudo apt-get install inotify-tools.

Als Beispiel können wir eine fortlaufende Überwachung ( -mFlag) des Verzeichnisses einrichten Desktopund die Ausgabe für erstellte Verzeichniseinträge analysieren. Dabei können wir jedoch feststellen, ob es sich bei einer Datei um eine reguläre Datei handelt und bei einem Dateinamen muss dies manuell erfolgen:

inotifywait -m --format "%f" -e create ./Desktop/  | 
while read -r fname; do 
    [ -f ./Desktop/"$fname" ] && [ "$fname" = "specific.csv" ] && echo "We got 'em!" 
done

specific.csvWenn specific.csvalso jemand ein Verzeichnis erstellt , das abgelehnt werden soll, aber wenn es erstellt wird, führen wir einen echoTeil aus, der durch andere Befehle oder Shell-Funktionen ersetzt werden könnte. Wenn Sie eine nicht blockierende Ausführung benötigen, können Sie setsidden Befehl hinzufügen , um ihn in einer neuen Sitzung zu starten und das Skript weiter überwachen zu lassen.

Sergiy Kolodyazhnyy
quelle