ホームページ >バックエンド開発 >PHPチュートリアル >Crontab による PHP ベースのスケジュールされたタスク管理

Crontab による PHP ベースのスケジュールされたタスク管理

WBOY
WBOYオリジナル
2016-06-23 13:45:581341ブラウズ

BY JENNER · 2014 年 11 月 10 日 · 読み取り数: 6

Linux の crontab は、常にサーバーの運用と保守、およびビジネス開発のための強力なツールです。しかし、スケジュールされたタスクの数が増えると、管理と移行が煩雑になり、問題が発生しやすくなります。以下は PHP で書かれた crontab マネージャーを提供しますが、このマネージャーを実行するには crontab の下に 1 分に 1 回実行される呼び出しを追加する必要があります。このマネージャーを通じて、次の目的を達成できます:

  • 分散スケジュールされたタスクの集中管理
  • 複数の crontab レコードのマージ
  • crontab レコードの永続的なストレージ (設定ファイルまたはデータベース)
  • データベースを使用することは推奨されません。データベースリクエストが長期間にわたって安定した応答を維持できることを確認できない場合は、crontab 構成を管理します。 nosql タイプのキャッシュ ストレージを使用し、永続的なバックアップを作成することをお勧めします。

    早速、最後のテスト コードを示します。

    define('DS', DIRECTORY_SEPARATOR);requiredirname(__FILE__) . DS . 'vendor'. DS . 'autoload.php';date_default_timezone_set('PRC'); error_reporting(E_ALL); $crontab_config= [    'test_1'=> [        'name'=> '服务监控1',        'cmd'=> 'php -v',        'output'=> '/tmp/test.log',        'time'=> '* * * * *'    ],    'single_test'=> [        'name'=> 'php -i',        'cmd'=> 'php -i',        'output'=> '/tmp/single_script.log',        'time'=> [            '* * * * *',            '* * * * *',        ],    ],]; $crontab_server= new\Jenner\Zebra\Crontab\Crontab($crontab_config);$crontab_server->start();

    このコードは、PHP のパッケージ マネージャー コンポーザーを使用しています。理解できない場合は、使用する必要があるクラスを PHP スクリプトに手動で含めることができます。

    実行後、デフォルトのログ ファイル (/var/log/php_crontab.log) で crontab の実行記録が表示されます。もちろん、2 番目のパラメーターを Crontab に渡すことで、ログ ファイルのログを指定できます。書き込み可能)。ログ ファイルの内容は次のとおりです:

    [2014-11-10 19:50:08]-content:start. pid3778[2014-11-10 19:50:08]-content:php -v[2014-11-10 19:50:08]-content:php -i[2014-11-10 19:50:08]-content:php -i[2014-11-10 19:50:08]-content:end. pid:3778

    ログには、プログラムの起動時間、実行中のコマンド、pid、およびその他の情報が記録されます。手動で行ったので正確な00秒ではありません。正式に使用する場合は、以下のコマンドをcrontabに追加してマネージャーの自動動作を実現します。

    * * * * * php php_crontab_manager.php

    マネージャー関連の依存関係:

  • プロセス制御パッケージ: "jenner/multi_process": "1.0.0",
  • pcntl 拡張機能
  • crontab サービス
  • jenner/multi_process パッケージは、主に単純なプロセス制御パッケージです。子プロセスを使用してスケジュールされたタスクを実行し、親プロセスがブロックされてスケジュールされたタスクに遅延が発生しないようにします。

    プロジェクトのアドレス:

    このプロジェクトは github でホストされており、packagist パッケージのサポートを提供します: "jenner/crontab": "1.0.0" をcomposer.json に追加することで、このパッケージをロードできます。

    具体的なソースコードはgithubでご覧いただけます。

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。