ホームページ  >  記事  >  バックエンド開発  >  Crontab の PHP ベースのスケジュールされたタスク管理コード共有

Crontab の PHP ベースのスケジュールされたタスク管理コード共有

WBOY
WBOYオリジナル
2016-06-20 13:01:121510ブラウズ

PHP ベースの crontab スケジュールされたタスク管理

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 パッケージは、単純なプロセス制御パッケージです。主に、親プロセスがブロックしてスケジュールされたタスクの遅延を引き起こさないように、子プロセスを使用してスケジュールされたタスクを実行するために使用されます。


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