プログラムでGNU/Linux Cronジョブを管理するPHPライブラリ。
それはあなたを可能にします:
crontabコマンドラインユーティリティ(配布に既にインストールされているはずです)。sudo 、適切な問題に遭遇することなく、ランタイムユーザーよりも別のユーザーのCrontabを管理したい場合(以下を参照) ライブラリは、Composerを使用してインストールできます。
composer require tiben/crontab-manager ~1.0
ライブラリは3つのクラスで構成されています。
CrontabJobは、Cronジョブを表すエンティティクラスです。CrontabRepositoryは、Cronの仕事を持続/回収するために使用されます。CrontabAdapter 、CrontabでCron Jobsの持続性を処理します。働くために、クロンタブレポジトリーにはクロンタバダプターのインスタンスが必要です。
$crontabRepository = new CrontabRepository(new CrontabAdapter());
毎日23:30にコマンド「df >> /tmp/df.log」を起動することで構成される新しいジョブを作成するとします。 2つの方法で行うことができます。
純粋なooの方法で:
$crontabJob = new CrontabJob();
$crontabJob
->setMinutes(30)
->setHours(23)
->setDayOfMonth('*')
->setMonths('*')
->setDayOfWeek('*')
->setTaskCommandLine('df >> /tmp/df.log')
->setComments('Logging disk usage'); // Comments are persisted in the crontab
ファクトリーメソッドを使用した生のcron構文文字列から:
$crontabJob = CrontabJob::createFromCrontabLine('30 23 * * * df >> /tmp/df.log');
これで、Crontabリポジトリに新しいCronjobを追加し、Crontabのすべての変更を維持できます。
$crontabRepository->addJob($crontabJob);
$crontabRepository->persist();
既存のcronjobの時間を変更したいとします。存在するジョブを見つけることは、いくつかの正規表現を使用して行われます。正規表現は、クロンタブ線全体に適用されます。
$results = $crontabRepository->findJobByRegex('/Logging disk usage/');
$crontabJob = $results[0];
$crontabJob->setHours(21);
$crontabRepository->persist();
このようなジョブを削除できます。
$results = $crontabRepository->findJobByRegex('/Logging disk usage/');
$crontabJob = $results[0];
$crontabRepository->removeJob($crontabJob);
$crontabRepository->persist();
注:Cronジョブは参照によって内部的に一致するため、リポジトリから以前に取得するか、以前に追加する必要があります。
この機能により、ランタイムを起動したユーザーよりも、別のユーザーのCrontabを管理できます。これは、ランタイムユーザーがwww-dataであるが、編集したいcrontabの所有者が独自のLinuxユーザーアカウントである場合に役立ちます。
これを行うには、CrontabadapterコンストラクターのパラメーターとしてCrontab所有者のユーザー名を単純に渡すだけです。あなたがwww-dataであり、ユーザーbobbyのcrontabを編集したいとします。
$crontabAdapter = new CrontabAdapter('bobby');
$crontabRepository = new CrontabRepository($crontabAdapter);
この方法では、ユーザーの権利の問題に遭遇する可能性があります。これは、「visudo」を使用してsudoersファイルを編集することで処理できます。
ユーザーwww-dataユーザーbobbyのcrontabを編集できるようにしたい場合は、この行を追加します。
www-data ALL=(bobby) NOPASSWD: /usr/bin/crontab
ユーザーwww-data sudoを使用してユーザーbobbyとしてcrontab呼び出すときにパスワードを要求しないようにsudoに指示します
これで、このようにユーザーbobbyのクロンタブにアクセスできます。
$crontabAdapter = new CrontabAdapter('bobby', true);
$crontabRepository = new CrontabRepository($crontabAdapter);
Crontabadapterコンストラクターコールにtrueの2番目のパラメーターに注意してください。このブールは、 crontabを呼び出すときにsudo内部的に使用するようクロンタバダプターに指示します。
それに応じて、cronjobオブジェクトのsetEnabled()メソッドを使用して、クロンジョブを有効または無効にすることができます。
$crontabJob->setEnabled(false);
これにより、Cronの仕事が維持されているときに#を使用して、Cronジョブを準備します。
さらに、別のユーザーのCrontabsを読み取れない場合、またはジョブを実行するマシン上でCronsが実行されない分散アーキテクチャを使用している場合は、 CrontabAdapterInterfaceを実装してアーキテクチャ用の他のアダプターを作成できます。
その後、アダプターを使用してCrontabRepositoryインスタンス化できます。
テストはphpunitを使用して作成されており、バージョン5.3+が必要です。テストを実行するには:
$ phpunit <crontab-library-path>/tests
Composerを使用してライブラリをインストールし、Dev依存性をインストールした場合、依存関係として含まれるPHPunitを使用して実行できます。
$ ./vendor/bin/phpunit <crontab-library-path>/tests
...大歓迎です:)