2

У меня есть задание cron, которое обрабатывает файлы, которые мой клиент загружает через FTP на мой сервер FreeBSD. Задание cron выполняется один раз в час, и обычно обработка каждого файла занимает всего несколько секунд.

Задание cron просматривает каталог загрузки клиента и перемещает все новые файлы в каталог tmp. Затем он обрабатывает файл (ы) и перемещает их в окончательный каталог, где они затем становятся доступными для общественности через веб-сайт.

Проблема в том, что время от времени задание cron запускается так же, как при загрузке нового файла. Он перемещает наполовину загруженный файл в каталог tmp, пытается его обработать и, конечно же, дает сбой.

Вопрос: как определить, завершен ли загруженный файл? Единственное, о чем я могу подумать, это проверить размер файла, чтобы увидеть, меняется ли он, но это похоже на пометку. Есть ли какой-нибудь флаг или что-то, что устанавливается после завершения загрузки?

3 ответа3

4

Самый безопасный способ - найти в журналах вашего ftp-сервера сообщение "передача завершена" (зависит от программного обеспечения).

Если это невозможно, обработайте только те файлы, которые не были затронуты в течение некоторого безопасного времени, скажем, 10 минут. Используйте find чтобы получить список этих файлов, например, за 10 минут и ваши загрузки в $UPLOAD_DIR

find $UPLOAD_DIR -amin +10

+ Означает «больше, чем». Смотрите man 1 find для получения дополнительной информации.

1

fuser может сделать свое дело. Это позволяет вам посмотреть, какие процессы используют файл. Двигайтесь только в том случае, если процессы не используются.

0

Создает ли задание cron имя процесса? Если это так, используйте ps с grep, чтобы увидеть, работает ли старый процесс.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .