У меня есть сценарий, в котором я загружаю файлы .csv в определенную папку, / tmp / data_upload, каждый день, и старые файлы заменяются новыми.
Мне нужно запустить скрипт Python после загрузки данных. Для этого у меня есть идея создать задание cron и отслеживать изменения в файле. Я пытался использовать inotify, но я не очень в области Unix. Как я могу это сделать?
Мне нужно выполнить скрипт test.py, как только в папке загрузки появится изменение даты файла, например, / tmp / data_upload.
inotify
библиотеки. Смотрите один из моих ответов здесь для примера: askubuntu.com/a/939392/295286Ответы:
Вам может понадобиться incrond (inotify cron daemon), который будет отслеживать изменения в файлах и затем выполнять сценарии.
Incrond может отслеживать добавление нового файла, изменение, удаление и многое другое. В этой статье показано, что событие incrond может отслеживать на некотором примере.
Пример для вашего случая, вы можете создать файл
/etc/incron.d/data_upload
с содержимымисточник
incrontab -e
от имени пользователя root и включите эту строку/tmp/data_upload IN_CREATE,IN_MODIFY test.py
? так, чтобы проверить, как только я загружаю новый файл, он должен выполнить файл test.py? где я должен разместить файл test.py? я должен предоставить абсолютный путь для этого?Вы можете использовать entr для автоматического запуска скрипта каждый раз, когда файл изменяется, запускаясь
ls /tmp/data_upload | entr -p script.py
один раз при запуске.Сайт проекта: http://eradman.com/entrproject/
Справочная страница в Интернете: https://www.systutorials.com/docs/linux/man/1-entr/
источник
В
watchexec
( https://crates.io/crates/watchexec ) утилита командной строки звучит как именно то , что вам нужно, хотя я считаю , чтобы установить его , вы должны были бы иметь утилиты сборки ржавчины , установленных на вашем компьютере, так что может быть dealbreakerисточник
Мой общий подход заключается в том, чтобы возиться с классической
find
утилитой Unix . Например, команданайдет любые
.csv
файлы/tmp/upload_data
, которые были изменены менее одного дня назад, и запустит ваш,test.py
если найдет какие-либо. Конечно, если вашtest.py
файл находится в каком-то другом каталоге, вы хотите соответствующим образом обновить свой путь к нему.Если вы выполняете свою
cron
работу чаще, чем раз в день, вы можете использоватьmmin
опцию,find
чтобы указать максимальное время с момента изменения в минутах. Например,будет искать
.csv
файлы, которые были изменены менее 60 минут назад - полезно, если cron запускает задание ежечасно.Два справедливых предупреждения в порядке: во-первых, это не поймает
.csv
файлы, которые вы полностью удалили. Вы можете проверить это отдельно. Во-вторых, у меня не было времени проверить это. Ожидайте опечаток в моем коде, которые вам придется отлаживать самостоятельно.источник
-cmd
синтаксис? IIRCfind
принимает-exec cmd ;
...