Как проверить, выполняется ли cron-задача или нет?

Вопрос или проблема

Я добавил следующую команду в crontab -e:

15 * * * * php /home/rizwan/PHP-workspace/mgstore/testcron.php

Мне нужно запускать testcron.php каждые 15 минут; для тестирования я использовал следующий PHP код в testcron.php:

<?php 
echo "test";

15 * * * * /usr/bin/php /home/rizwan/PHP-workspace/mgstore/testcron.php >> /home/rizwan/cron.out 

это работало. Но у меня есть один PHP скрипт для добавления клиентов из Magento в ERP, когда я запускаю скрипт вручную, он запрашивает авторизацию, после принятия он создает клиентов в ERP из Magento. Мне нужно, чтобы каждый раз, когда я добавляю клиента в Magento, через 5 или 10 минут этот скрипт запускался и добавлял клиента в ERP. Как это можно сделать? Если у кого-то есть идеи, пожалуйста, помогите.

Сначала вы должны удостовериться, что запускаете исполняемый файл по полному пути. Вы можете получить путь, используя команду which.

$ which php
/usr/bin/php

Теперь запись в crontab должна быть:

15 * * * * /usr/bin/php /home/rizwan/PHP-workspace/mgstore/testcron.php

Теперь, чтобы проверить вывод, вы можете использовать трюк с редиректом, направьте вывод в файл, и затем вы можете проверить файл, чтобы увидеть результат. Таким образом, запись будет:

15 * * * * /usr/bin/php /home/rizwan/PHP-workspace/mgstore/testcron.php >> /home/rizwan/cron.out

Теперь вы можете проверить файл в вашем домашнем каталоге, названный cron.out, и увидеть, выполнялся ли ваш cron.

В PHP вы можете использовать либо оператор обратных кавычек, либо функцию shell_exec() для выполнения команды в стандартной оболочке системы; вы можете запустить pgrep 'php /home/rizwan/PHP-workspace/mgstore/testcron.php' и оценить его код возврата; вот так:

<?php
    if(!($PID = `pgrep 'php /home/rizwan/PHP-workspace/mgstore/testcron.php'`))
        echo 'Процесс работает с PID ' . $PID . '.';
?>

Или так:

<?php
    if(!($PID = shell_exec("pgrep 'php /home/rizwan/PHP-workspace/mgstore/testcron.php'")))
        echo 'Процесс работает с PID ' . $PID . '.';
?>

Ответ или решение

Проверка выполнения задач cron является важной частью администрирования серверов и обеспечения надежной работы скриптов, особенно таких, которые интегрируют разные системы, как ваш сценарий с Magento и ERP. Рассмотрим несколько методов, чтобы убедиться, что ваша задача cron запускается корректно и выполняется без ошибок.

1. Проверка задания cron

Чтобы подтвердить, что ваше задание cron настроено правильно, выполните следующую команду:

crontab -l

Это покажет все задания cron, настроенные для текущего пользователя. Убедитесь, что ваша запись выглядит так:

15 * * * * /usr/bin/php /home/rizwan/PHP-workspace/mgstore/testcron.php >> /home/rizwan/cron.out 2>&1

Важно также направить стандартный поток ошибок в файл cron.out, добавив 2>&1 в конец команды. Это поможет вам диагностировать исключения или ошибки, которые могут возникнуть во время выполнения скрипта.

2. Просмотр выходных данных и ошибок

После того как задача была выполнена, проверьте файл cron.out, где сохраняются все выходные данные вашей задачи:

cat /home/rizwan/cron.out

Если файл пустой, это может свидетельствовать о том, что скрипт либо не выполнялся, либо не производил никаких выводов. Обратите внимание на текущую временную метку на своем сервере, чтобы убедиться, что задача действительно должна была выполняться.

3. Мониторинг процессов PHP

Для более детальной проверки того, запущен ли ваш скрипт в данный момент времени, вы можете использовать команду pgrep. Например, выполните:

pgrep -af 'php /home/rizwan/PHP-workspace/mgstore/testcron.php'

Эта команда покажет процессы PHP, которые соответствуют вашему скрипту. Если он работает, вы увидите его PID и командную строку.

4. Использование PHP для проверки выполнения

Как вы упомянули, вы можете также интегрировать проверку выполнения непосредственно в ваш скрипт. Используйте следующий код для проверки, работает ли процесс:

<?php
$pid = shell_exec("pgrep -f 'php /home/rizwan/PHP-workspace/mgstore/testcron.php'");
if ($pid) {
    echo 'Процесс запущен с PID: ' . $pid;
} else {
    echo 'Процесс не выполняется.';
}
?>

5. Дебаггинг

Если после всех проверок вы обнаружили, что задача не выполняется, вот несколько рекомендаций для устранения неполадок:

  • Права доступа: Убедитесь, что скрипт testcron.php имеет необходимые права доступа для выполнения и записи в файл cron.out.
  • Пути: Убедитесь, что вы используете полный путь к PHP и скрипту. Используйте команду which php, чтобы получить полный путь к интерпретатору PHP.
  • Ошибки выполнения: Посмотрите в системные журналы, например /var/log/syslog или /var/log/cron.log, чтобы проверить, есть ли какие-либо сообщения об ошибках, связанных с выполнением cron.

Заключение

С помощью этих методов вы сможете эффективно проверить, запускается ли ваш cron-заказ и работает ли ваш скрипт должным образом. Это важный процесс, который поможет поддерживать надежность вашей интеграции между Magento и ERP. Если у вас есть дополнительные вопросы или необходимость в помощь, не стесняйтесь обращаться к экспертам по системному администрированию.

Оцените материал
Добавить комментарий

Капча загружается...