Mam scenariusz, w którym każdego dnia przesyłam pliki .csv do określonego folderu / tmp / data_upload, a stare pliki są zastępowane nowym.
Po przesłaniu danych muszę uruchomić skrypt w języku Python. W tym celu mam pomysł, aby utworzyć zadanie cron i monitorować zmiany w pliku. Próbowałem użyć inotify, ale nie jestem zbytnio zainteresowany domeną Unix. Jak mogę to zrobić?
Muszę wykonać skrypt test.py, gdy nastąpi zmiana daty pliku w folderze przesyłania, na przykład / tmp / data_upload.
inotify
dostępne biblioteki. Zobacz jedną z moich odpowiedzi tutaj na przykład: askubuntu.com/a/939392/295286Odpowiedzi:
Może być potrzebny incrond (demon cot inotify), który będzie monitorował zmiany w plikach, a następnie wykonywał skrypty.
Incrond może monitorować dodawanie nowego pliku, modyfikowanie, usuwanie i wiele innych. W tym artykule pokazano, jakie zdarzenia incrond może monitorować na przykładzie.
Przykładem przypadku może być utworzenie pliku
/etc/incron.d/data_upload
z zawartościąźródło
incrontab -e
jako root, a następnie dołączyć tę linię/tmp/data_upload IN_CREATE,IN_MODIFY test.py
? aby sprawdzić, czy po przesłaniu nowego pliku powinien wykonać plik test.py? gdzie powinienem umieścić plik test.py? czy powinienem podać bezwzględną ścieżkę do tego?Możesz użyć entr do automatycznego uruchamiania skryptu przy każdej zmianie pliku, uruchamiając go
ls /tmp/data_upload | entr -p script.py
raz podczas uruchamiania.Strona projektu: http://eradman.com/entrproject/
Strona man online: https://www.systutorials.com/docs/linux/man/1-entr/
źródło
W
watchexec
( https://crates.io/crates/watchexec ) Linia komend dźwięki Narzędzie jak dokładnie to, co trzeba, chociaż uważam go zainstalować trzeba by mieć narzędzia kompilacji Rust zainstalowane na komputerze, dzięki czemu może być łamaczźródło
Moje ogólne podejście polegałoby na majstrowaniu przy klasycznym
find
narzędziu uniksowym . Na przykład polecenieznajdzie wszystkie
.csv
pliki/tmp/upload_data
, które zostały zmodyfikowane mniej niż dzień temu, i uruchomitest.py
je, jeśli je znajdzie. Oczywiście, jeśli twójtest.py
plik znajduje się w innym katalogu, chcesz odpowiednio zaktualizować swoją ścieżkę do niego.Jeśli wykonujesz
cron
zadanie częściej niż raz dziennie, możesz użyćmmin
opcji,find
aby określić maksymalny czas od modyfikacji w minutach. Na przykład,wyszuka
.csv
pliki, które zostały zmodyfikowane mniej niż 60 minut temu - przydatne, jeśli cron uruchamia zadanie co godzinę.Dwa uczciwe ostrzeżenia są w porządku: Po pierwsze, nie złapie
.csv
plików, które zostały całkowicie usunięte. Możesz je sprawdzić osobno. Po drugie, nie miałem czasu na testowanie tego. Oczekuj literówek w moim kodzie, które będziesz musiał samodzielnie debugować.źródło
-cmd
składnia? IIRCfind
bierze-exec cmd ;
...