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