Magento 2: Проверьте, не запущена ли уже задача cronjob


Как лучше всего проверить, уже ли запущено задание cronjob?

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

Как я могу избежать выполнения cronjob несколько раз?

Author: Peter Horitzer, 2018-06-05

3 answers

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

service cron status

Или проверьте следующую таблицу, чтобы увидеть, какие кронджобы запущены (очистите (усеките!) таблицу и посмотрите, заполнена ли она заново, чтобы проверить, работают ли ваши кроны так, как вы хотите):

cron_schedule
 1
Author: Condor, 2018-06-05 14:57:10

Лучшее расширение для этого (оно тоже бесплатное):

Https://github.com/AOEpeople/Aoe_Scheduler

 0
Author: DevAnd, 2018-06-05 15:05:47

Я хочу иметь возможность проверять таблицу 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.

 0
Author: hey, 2018-08-14 21:56:24