Magento 2: Проверьте, не запущена ли уже задача cronjob
Как лучше всего проверить, уже ли запущено задание cronjob?
Мне нужна работа с друзьями, которая проверяет, есть ли новые файлы в папке, а затем выполняет некоторые действия с этими файлами. Кронджоб должен каждую минуту проверять наличие новых файлов. Проблема в том, что для выполнения самого задания может потребоваться более одного часа.
Как я могу избежать выполнения cronjob несколько раз?
3 answers
Выполните следующую команду, чтобы проверить, запущены ли crons:
service cron status
Или проверьте следующую таблицу, чтобы увидеть, какие кронджобы запущены (очистите (усеките!) таблицу и посмотрите, заполнена ли она заново, чтобы проверить, работают ли ваши кроны так, как вы хотите):
cron_schedule
Лучшее расширение для этого (оно тоже бесплатное):
Я хочу иметь возможность проверять таблицу cron довольно часто, без необходимости входить в систему или подключаться вручную к sql-серверу. Я не хотел устанавливать новый модуль, и поэтому просто использовал очень простую php-страницу в скрытой папке:
<?php
/**
* src/pub/hidden/cronschedule.php
*/
// read Magento2 config
$conf = include('../../app/etc/env.php');
echo '<h1>Cron Jobs</h1>';
try {
$DB_HOST = $conf['db']['connection']['default']['host'];
$DB_USER = $conf['db']['connection']['default']['username'];
$DB_PASS = $conf['db']['connection']['default']['password'];
$DB_DBNM = $conf['db']['connection']['default']['dbname'];
// instanciate db connection
$dbh = new PDO('mysql:host=' . $DB_HOST . ';dbname=' . $DB_DBNM, $DB_USER, $DB_PASS);
// prepare and execute sql statement
$sql = 'SELECT * from cron_schedule order by scheduled_at desc limit 400;';
$res = $dbh->query($sql);
// output the list
echo $res->rowCount() . ' records * Server time: ' . date('d.m.Y H:i:s');
$firstRow = true;
if ($res->rowCount() > 0) {
echo '<table>';
while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
if ($firstRow) {
echo '<tr>';
foreach ($row as $fieldname => $field) {
echo '<th>' . $fieldname . '</th>';
}
echo '</tr>';
$firstRow = false;
}
echo '<tr>';
foreach ($row as $field) {
echo '<td>' . $field . '</td>';
}
echo '</tr>';
}
}
$dbh = null;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
}
Список заданий cron затем можно просмотреть с помощью https://my.domain/hidden/cronschedule.php
Можно улучшить сценарий, отформатировав результат с помощью json, отформатировав вывод как правильный html или добавив выпадающие поля для фильтры.
Очень важно защитить паролем "скрытый" каталог. Это может быть через.htaccess.