この投稿はすでに数年前のものですが、これが最も役に立ったので、他の人にも役立つように私の調査結果を共有させてください.
私は DirectAdmin を使用しており、cron の例は両方とも機能しています。[Send all Cron output to E-Mail] からメール アドレスを削除したため、cron ジョブのメール通知が届きません。
20 分ごとに実行される cURL リクエストから始めました。
*/20 * * * * /usr/local/bin/curl --silent 'https://demo.tld/app/stats/?update&key=1234'
URL の前後の「 」に注意してください。そうしないと、複数のパラメータを追加できません。
私はそのページを API にインスパイアされた方法として使用して、別の Web サイトから収集したいくつかの統計の更新をトリガーし、他の Web サイトから JSON 形式で取得できるようにしています。パラメータ「update」は更新プロセスをトリガーし、パラメータ「key」は、検証されると、cronjob が更新を要求したときにのみ実行したい追加の更新アクションをトリガーします。
上記の cronjob は基本的に両方向で帯域幅を消費するので、PHP ベースの cronjob を使用したかったのですが、パラメーターに問題が発生しました...そのため、この投稿を見つけて 1 日を節約できました :)
*/20 * * * * /usr/local/bin/php /home/path/to/public_html/app/stats/index.php update key=1234
ご覧のとおり、ファイル名 (index.php) がパスに含まれるようになり、その後にパラメーターが続きます (? と & は使用しません)。
このようにして cronjob を動作させることができますが、パラメーターが経由で渡されないため、途中までしか進んでいません...キー$_GET
のチェックを使用してスクリプトをコーディングした場合、これは少し面倒です!$_GET
それで、それはどのように機能しますか?シンプルな (少なくともいくつかの調査の後)、cronjob は という名前の変数を介してスクリプトにパラメーターを渡します$argv
。
その知識をもとに、 を次のように変換する方法を探しまし$argv
た$_GET
。
- 更新は、手動と cronjob の両方でトリガーできます。
- スクリプト全体を書き直す必要はありませんでした。
$argv
が実際に設定されている場合にのみ実行する次のソリューションを見つけたので、if isset
チェックでラップしました。
if( isset( $argv ) )
{
foreach( $argv as $arg ) {
$e = explode( '=', $arg );
if( count($e) == 2 )
$_GET[$e[0]] = $e[1];
else
$_GET[$e[0]] = 0;
}
}
これもあなたに役立つことを願っています:)