Как правильно отслеживать выполнение PHP во внешнем интерфейсе? - PullRequest
1 голос
/ 11 июля 2020

Я буду использовать пример, чтобы продемонстрировать это.

Предполагая, что у меня есть база данных MySQL, в которой я помещаю пути к файлам, которые нужно загрузить на S3, и столбец состояния, где каждому файлу присваивается либо pending или uploaded строка.

У меня есть сценарий PHP, upload.php, который я могу запустить с php upload.php и получать вывод, записанный в мой терминал по мере выполнения сценария. Я хотел бы настроить задание cron, которое запускает сценарий через определенные промежутки времени, скажем, каждые 30 минут, где каждый раз, когда запрашивается БД, и файлы, содержащие статус pending, обрабатываются для загрузки.

Теперь я хочу иметь возможность отслеживать ход выполнения скрипта независимо от его текущего статуса во внешнем интерфейсе (если в настоящее время в БД нет ожидающих элементов).

Хотя я был бы признателен за любые уточнения c предложение о том, как это сделать, мой вопрос также касается наилучшей практики - то есть, каков правильный способ сделать это?

Вот пример такого сценария (он использует Джошкам MysqliDb )

// Get items with a pending status
function get_items_queue() {
      global $db;
      $cols = Array ("id", "filename");
      $db->where('status = "pending"');
      return $db->get('files', null, $cols);
}

// Upload items to S3
function UploadToS3($filename) {
    if (empty($filename)) {
          return false;
    }

    include_once('/s3/aws-autoloader.php');
    $s3 = new S3Client($somearray); // Some S3 credentials here

    // Print status
    echo $filename . ' is uploading';
    $uploaded = $s3->putObject($somearray); // Uploading to S3

    if ($s3->doesObjectExist($s3_bucket, $filename)) {
          // Print status
          echo $filename . ' was uploaded';
    } else {
          // Print status
          echo 'There has been an issue while uploading ' . $filename;
    }
}

// Run the script
$queue_items = get_items_queue();
foreach ($queue_items as $key => $item) {
      $upload = UploadToS3($item['filename']);
      // Some function here that changes the status column for the uploaded item to 'uploaded'
      if ($upload) {
            set_item_queue_status($item['id']);
      }
}

1 Ответ

0 голосов
/ 12 июля 2020

В итоге я установил установку Cronicle из jhuckaby.

По сути, менеджер cron, но в моем случае наиболее важным является просмотрщик журналов в реальном времени. Это позволяет мне запускать скрипт, используя задание cron с заданными мною интервалами, и наблюдать, как он выполняется через средство просмотра журналов, при этом имея возможность выйти и вернуться в любой момент, чтобы просмотреть текущую запущенную задачу (или любую из предыдущие задачи, которые выполнялись, пока меня не было).

введите описание изображения здесь

...