【PHP × cron × Slack】サーバでの定期処理をSlackに通知する

IT全般
スポンサーリンク

はじめに

お名前.comなどの共用サーバで「cron(クーロン)」を使ってPHPスクリプトを定期実行している方も多いのではないでしょうか?

今回はそのcronの実行結果(成功・失敗など)をSlack通知する方法をご紹介します。

初心者エンジニアの方でも安心して導入できるように、具体的なコードと手順を丁寧に解説します。

ちなみに過去記事はこちらから参照できます。

cronとは?

cronとは、UNIX系のサーバで「特定の時間に自動的に処理を実行する仕組み」のことです。

例えば:

  • 毎朝9時にバックアップ処理を実行
  • 毎週月曜日にレポートを自動生成 などが可能になります。

共用サーバでのcronの使い方(例)

/usr/bin/php /home/ユーザー名/public_html/ドメイン名/your-script.php

お名前.com共用サーバでは、コントロールパネルから簡単にcronを設定できます。
※過去の投稿を参考に

Slack通知の概要

Slackに通知するには、Slackの「Incoming Webhook」という仕組みを使います。

通知の流れ

  1. PHPでcron実行ログを記録
  2. そのログをSlackに送信するスクリプトを呼び出す
  3. Slackにメッセージが届く!

SlackのWebhook URLを取得

  1. Slackの任意のチャンネルでアプリを追加
  2. 「Incoming Webhooks」を検索し、有効にする
  3. Webhook URLを生成(https://hooks.slack.com/services/… の形式)

Slack通知用のPHPを作成

以下のような includes/slack_notify.php を用意します。

<?php
function slack_notify($message) {
    $webhook_url = 'https://hooks.slack.com/services/あなたのWebhookURL';
    
    $payload = json_encode([
        'text' => $message,
    ]);
    
    $ch = curl_init($webhook_url);
    curl_setopt_array($ch, [
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => $payload,
        CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
        CURLOPT_RETURNTRANSFER => true,
    ]);
    
    $response = curl_exec($ch);
    if (curl_errno($ch)) {
        error_log('Slack通知失敗: ' . curl_error($ch));
    }
    curl_close($ch);
}

3. cronスクリプトに通知を組み込む

import_from_xxxxx.php の中で以下のようにSlack通知を呼び出します。

require_once __DIR__ . '/includes/slack_notify.php';

// 成功時
log_message('cron_log.txt', "第{$round}回を登録しました。");
slack_notify("✅ 第{$round}回のデータを登録しました");

// エラー時(例)
log_message('cron_error.log', "データ取得に失敗しました。");
slack_notify("❌ データ取得に失敗しました");

通知イメージ

Slackにはこのように表示されます👇

✅ 第xxx回のデータを登録しました

おわりに

Slack通知を組み合わせることで、cron処理が成功したか失敗したかをすぐに把握できます。

特にお名前.comのような共用サーバでは、GUIでのエラーログ確認が面倒なので、Slack通知がとても便利です。

補足:PHP_SAPIによる環境判定

cronから実行されたPHPスクリプトは PHP_SAPI(PHPの実行環境)が cli(Command Line Interface)になります。

これを使うことで「Webからの実行」と「cronからの実行」を簡単に判別できます。

if (PHP_SAPI === 'cli') {
    // cronやターミナル経由の実行
} else {
    // Webブラウザ経由の実行
}

まとめ

内容説明
cron定期実行のための仕組み(お名前.comにも対応)
Slack通知Webhookで簡単に実装可能
PHP_SAPI実行環境(Web or CLI)を判定できる

Slack通知を組み込んで、cronの「見える化」を進めましょう!

コメント

タイトルとURLをコピーしました