Выполняет ли cron-работу последнее выполнение cron?

У меня задание cron выполняется PHP-скрипт. Cron настроен для запуска каждую минуту, это делается только для целей тестирования. Сценарий PHP, который он выполняет, предназначен для конвертации видео, загружаемых пользователями на сервер, в формат флэш-памяти (например … .flv). Скрипт выполняется отлично, когда вручную выполняется через командную строку, однако при выполнении через cron он начинается нормально, но через одну минуту он просто останавливается.

Кажется, что когда следующий cron исполняется, он «убивает» последнее выполнение cron. Я добавил следующую функцию PHP:

ignore_user_abort(true); 

В надежде, что он не прервет последнее исполнение, я протестировал настройку cron для запуска каждые 5 минут, что отлично работает, однако конвертация видео может занять более 5 минут, поэтому мне нужно выяснить, почему его остановка, когда другой cron казнены.

Любая помощь будет оценена по достоинству.

Спасибо!

EDIT: Мой cron выглядит так:

 */1 * * * * php /path_to_file/convert.php 

Related of "Выполняет ли cron-работу последнее выполнение cron?"

Я не думаю, что cron убивает любые процессы. Однако cron не подходит для длительных процессов. Что может случиться здесь, так это то, что ваш скрипт попирает себя, когда он выполняется несколько раз. Например, оба PHP-процесса могут пытаться писать в один и тот же файл одновременно.

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

 */1 * * * * * php /path/to/convert.php & >> /var/log/convert.log 

Вы также можете использовать упрощенный файл блокировки, чтобы гарантировать, что convert.php не выполняется несколько раз. Что-то вроде:

 if (file_exists('/tmp/convert.lock')) { exit(); } touch('/tmp/convert.lock'); // convert here unlink('/tmp/convert.lock'); 

Сам cron не остановит предыдущий экземпляр задания, поэтому, если есть проблема, почти что-то в вашем PHP делает это. Вам нужно будет опубликовать этот код.

Нет, не будет. Вы можете запустить второй процесс, создав файл блокировки, который скрипт проверяет для каждого запуска. Если файл существует, он не запускается. Это также должно, при необходимости, использоваться в сочетании с максимальным временем выполнения, так что один процесс не останавливает будущие исполнения на неопределенный срок. Файл блокировки может быть просто пустым текстовым файлом с именем /tmp/foo.lock.