cron ジョブを手動で操作するのは、cron ジョブの量が少ない場合に最も一般的です。しかし、大量の cron ジョブを扱っている場合はどうでしょうか? PHPが答えです! PHP を使用する理由単純に、cron ジョブの追加、削除、一覧表示に必要なタスクを自動化できるからです。
読者ではありませんか?この関連するビデオ チュートリアルをご覧ください。 ビデオが表示されない場合広告ブロッカーが無効になっていることを確認してください。このチュートリアルでは、PHP が Linux システムの cron ジョブの追加、削除、一覧表示を自動化することで時間を節約する方法を学びます。
準備?すぐに飛び込め!
前提条件
このチュートリアルは実践的なデモンストレーションです。フォローしたい場合は、次のものが揃っていることを確認してください:
- Crontab – 通常、Crontab はデフォルトで Linux オペレーティング システムにインストールされます。
- ほとんどの Linux ディストリビューションは、同じ cron システムを利用しています。ここでは、BSD ベースの基本システムを使用する macOS での例を示しています。
Crontab ファイルの作成
cron ジョブを管理する前に、まずこれらの cron ジョブを保存するファイルが必要です。すべての cron ジョブは、システム全体の 1 つの crontab ファイルに保存されます。
ターミナルを開き、以下のコマンドを実行してディレクトリを /usr/local
に変更します サブディレクトリを作成します (jobs
と scripts
)。これらのディレクトリには、必要に応じて別の名前を付けることができます。これらのディレクトリには、後で cron ジョブ ファイルとスクリプトが保存されます。
cd /usr/local && sudo mkdir jobs scripts
以下のコマンドを実行して、crontab ファイル (crontab -e
) を作成します。 )。 crontab ファイルは ~/tmp 内に自動的に作成されます crontab
を初めて呼び出したときのディレクトリ コマンド。
# Sets default text editor to nano
export EDITOR='nano'
# Initializes the crontab file and opens it in nano
crontab -e
単一 Cron ジョブの追加
crontab ファイルを作成したので、cron ジョブの管理を開始できます。ただし、最初に PHP 経由でそれらを追加することに集中する必要があります。どのように? PHP スクリプトを作成して実行し、cron ジョブを追加します。
以下に示すように、Cron ジョブは 5 つのパラメーターでスケジュールされます。各パラメータのデフォルト値は * です。これは、時間単位、日単位、週単位、または月単位の cron ジョブのいずれであっても、そのパラメータに値が指定されていないことを示します。
例を使用して cron ジョブの構文を復習する必要がある場合は、crontab の Web サイトを参照してください。
1. テキスト エディターでファイルを作成し、以下のコードをコピーして貼り付け、/usr/local/jobs に保存します。 ディレクトリ。この例では、ファイルの名前は newjob.py です ですが、別の名前にすることもできます。以下のコードは、テキスト (Executed!
) 実行時。
print("Executed!")
2. 次に、PHP スクリプト ファイルを作成し、以下のコードをコピーしてその PHP ファイルに貼り付け、/usr/local/scripts に保存します。 .このチュートリアルでは、スクリプトの名前は add.php です。 .
チュートリアル全体を通して、スクリプト ファイルを /usr/local/scripts ディレクトリに保存し、cron ジョブ ファイルを /usr/local/jobs ディレクトリに保存することに注意してください。
以下のコードは newjob.py を追加します crontab ファイル内の cron ジョブとしてファイル。
shell_exec
この操作は、新しいジョブを追加する前にメモリ内の文字列に cron ジョブのリストを保存するため、既存の cron ジョブが失われることはありません。
shell_exec
する うまくいかない? php.ini ファイルでこの機能を無効にしている可能性があります。disable_functions
を探します php.ini の設定を変更し、shell_exec
を削除します リストから。これは悪用される可能性があるので、この関数には注意してください!
3. 以下のコマンドを実行して、add.php
を実行します。 /usr/local/scripts のスクリプト ディレクトリ。 php add.php
php add.php
チュートリアル全体でスクリプトを実行するときは、/usr/local/scripts ディレクトリにいることを確認してください。
4. 最後に、以下の crontab -l
を実行します コマンドを実行して、新しい cron ジョブが存在するかどうかを確認します。
crontab -l
Cron ジョブの一覧表示
追加した cron ジョブを追跡して、それらを更新または削除できるようにしたい場合があります。その場合、最初のステップは、既存の cron ジョブを一覧表示することです。 cron ジョブのリストは、所有している cron ジョブを追跡するのに役立ちます。
新しい PHP スクリプトを作成し、一意の名前を付けて、以下のコードをスクリプト ファイルに貼り付けます。この例では、スクリプトの名前は list.php です。 .
以下のコードの shell_exec
操作は収集して表示します (echo()
) すべての cron ジョブ (crontab -l
) crontab ファイルから。
次に、以下のコマンドを実行して list.php を実行します
php list.php
cron ジョブの配列の一覧表示
おそらく、単純なリストではなく、配列内の cron ジョブのリストを印刷したいでしょう。その場合、) and [var_dump()](
が必要です 機能。これらの関数を使用すると、配列内の要素として crontab ファイル内に cron ジョブを保存できます。
list.php の内容を置き換えます 以下のコードを含むファイル。以下のコードを実行すると、cron ジョブの配列が一覧表示され、cron ジョブの文字列の長さも出力されます。
以下のコマンドを実行して、list.php
を実行します。
php list.php
以下に示すように、コードは cron ジョブのリストを配列に出力し、文字列の長さも表示します。
cron ジョブの削除
既存の cron ジョブのリストを取得したので、各 cron ジョブで何をするかを決定します。おそらく、削除したい cron ジョブがあるでしょう。その場合は、文字列変数で削除する cron ジョブを指定します。
1. remove.php という新しい PHP スクリプトを作成します。 この例では、以下のコードをスクリプトに追加します。スクリプト ファイルには、必要に応じて別の名前を付けることができます。
以下のコードは、crontab ファイルから特定の cron ジョブを削除します。
2. 次のコマンドを実行して、remove.php
を実行します。 脚本。
php remove.php
3. 最後に、crontab -l
を実行します。 newjob.php
を削除したかどうかを確認するコマンド クローンジョブ。 crontab -l
crontab -l
複数の Cron ジョブの追加と削除
1 つの cron ジョブを追加するだけでなく、自動化したい毎日のタスクがある場合などに、複数の cron ジョブを追加することもできます。どのように?スクリプトに for ループを追加する。
複数の cron ジョブの追加と削除は同様のアプローチを共有しますが、以下に示すように、複数の cron ジョブを削除するスクリプトは変数をより多く使用しています。
1. add.php の内容を置き換えます 以下のコードを含むファイル。以下のコードを実行すると、配列をパドリングすることで複数の cron ジョブが crontab ファイルに追加されます。
2. 次に、以下のコマンドを再実行して、add.php
を実行します。 脚本。 php add.php
php add.php
3. 以下の crontab -l
を実行します コマンドを実行して、crontab ファイルに追加した cron ジョブが存在するかどうかを確認します。 crontab -l
crontab -l
4. 次に、remove.php の内容を置き換えます これにより、定義した複数の cron ジョブが削除されます。複数の cron ジョブの追加と同様に、複数の cron ジョブの削除にも同じアプローチが適用されますが、変数が追加されます。
5. 次のコマンドを実行して、remove.php
を実行します。 脚本。
php remove.php
6. 最後に、crontab -l
を実行します。 コマンドを実行して、cron ジョブを削除したことを確認します。
crontab -l
cron ジョブを正常に削除した場合、以下のような出力は得られません。
cron ジョブを管理する関数の作成
これまで、個別のスクリプトで cron ジョブを追加、削除、一覧表示する方法を見てきました。ただし、cron ジョブを効果的に管理するには、3 つの個別のスクリプトを実行する代わりに、1 つのスクリプトで関数を作成できます。
新しいスクリプト ファイルを作成し、以下のコードを貼り付けます。スクリプトに任意の名前を付けますが、この例では、スクリプトの名前は multi.php です。 .
以下のコードは、スクリプトの最後で呼び出すことができる 3 つの個別の関数を使用して、cron ジョブを追加、削除、および一覧表示します。
次に、以下のコマンドを実行して multi.php
を実行します
php multi.php
以下に、list_jobs()
の出力を示します。 multi.php で呼び出される関数
メモリ過負荷の防止
cron ジョブを管理する PHP の機能を見てきましたが、cron ジョブが多すぎるとメモリが消費されます。メモリの過負荷を回避するには? crontab ファイルに追加できる cron ジョブの数に制限を設定します。
1. 次の関数を multi.php に追加します 脚本。以下の関数は、crontab ファイル内のすべての行をカウントすることによってすべての cron ジョブをカウントし、現在の cron ジョブ数を通知するメッセージを出力します。
function count_jobs(){
$jobs = shell_exec("crontab -l");
# Counts all cron jobs from the crontab file and prints the result
echo("You currently have ".substr_count( $jobs, "\n")." cron jobs");
}
2. 次に、count_jobs()
を呼び出します 「cron ジョブを管理する関数の作成」セクションで行ったように、スクリプトの最後に関数を追加します。
3. 以下のコマンドを実行して、multi.php
を実行します。 脚本。
php multi.php
以下に示すように、現在の cron ジョブ数を示すメッセージがあります。
しかし、同時に実行されている cron ジョブが多すぎる場合は、スクリプトを自動的に終了させたいと思うかもしれません。その場合、if
を追加します
4. count_jobs()
を置き換えます multi.php の関数 以下のファイルを使用してください。
以下の関数は、crontab ファイル内の行数を読み取り、その数に基づいて、スクリプトを終了するかどうかを決定します。
function count_jobs(){
$jobs = shell_exec("crontab -l");
# Counts all cron jobs from the crontab file and prints the result
echo("You currently have ".substr_count( $jobs, "\n")." cron jobs\n");
# Checks whether the cron jobs count is over 50 or not
if(substr_count( $jobs, "\n") > 50){
# Prints a message and terminates the script
exit("Too many cron jobs, cannot add any more!");
}
}
5. 最後に、multi.php
を実行します。 手順 3 で行ったようにスクリプトを作成します。 php multi.php
php multi.php
以下の出力では、現在の cron ジョブ数 (63) を示すメッセージを確認できます。 )。 cron ジョブの数が 50 を超えているため、スクリプトは自動的に終了し、cron ジョブの追加は続行されません。
結論
このチュートリアルを通して、PHP が shell_exec()
を使用して cron ジョブを自動化する方法を提供していることに気付きました。 関数。メモリを過負荷にしないようにしながら、単一の PHP スクリプトで cron ジョブを追加、削除、一覧表示する方法を学びました。
さて、次にプロジェクトの cron ジョブを管理する必要が生じたときに、PHP を検討しますか?