はじめに
お名前.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」という仕組みを使います。
通知の流れ
- PHPでcron実行ログを記録
- そのログをSlackに送信するスクリプトを呼び出す
- Slackにメッセージが届く!
SlackのWebhook URLを取得
- Slackの任意のチャンネルでアプリを追加
- 「Incoming Webhooks」を検索し、有効にする
- 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の「見える化」を進めましょう!
コメント