特にデータベース系の管理業務や、他アプリケーションとの連携などで必要になるcronでの定期実行についてです。
理屈は理解していたものの、実際に設定するとなるとちょっと調べなければいけなかったので忘備しておきます。
そもそもcron動いてる?
まずはcrond(cronデーモン?)の動作確認をば…
$ /etc/rc.d/init.d/crond status
上記コマンドで動作確認が行えるはずです。
動いていないようならば、以下のコマンドでcrondを起動します。
$ /etc/rc.d/init.d/crond start
PHPをキックしてみる
事前準備
cronからPHPを実行する場合、PHPのパス+実行したいファイルのパスが必要になります。
PHPのパスは以下のコマンドで確認してください。
$ which php
PHPのパスが確認できたので、実際にcronの設定ファイルに処理内容を記述します。
以下の書式で記述する必要があります。
分 時 日 月 曜日 [実行コマンド]
指定しない部分がある場合は「*」で埋める必要があります。
例えば、時間指定して実行する場合は以下のように記述します。
0 12 * * * [上で調べたPHPのパス] [実行したいPHPのフルパス]
これで、毎日12時になると実行されるという形です。
間隔を指定する場合や複数回実行する場合、範囲を指定することも可能です。
上記の処理を行いたい場合はドキュメントを参照してください。
cronの設定ファイルにコマンドを記述する
ターミナル上でエディタを起動して編集します。
$ crontab -e
基本的にはviエディタで開くはずですので、viエディタのコマンド等を参照して記述するようにしてください。
ということで、ざっくりですがcronでPHPを定期実行する設定方法でした。
一度設定すると、しばらく設定しなくなるものって忘れがちですよね…
外部ファイルを読み込んでいるPHPファイルの実行について:20200715追記
上記のとおり設定していたのですが「動いてないんじゃないか」ということで再度確認してみたところ、以下の情報が確認できました。
「外部ファイルを読み込んでいるある場合、実行パスが異なっているためインポート等に失敗する可能性がある」
相対パスで記述している場合、cronの実行パスからの相対パスとなるそうです。
そのため、ブラウザで動作確認したら動いたのに、cronだと動かない…ということになるとのこと。
言われてみればそうですよね…
ということで、さくっと解決方法です。
*/5 * * * * wget --spider http://www.hoge.com/hoge.php
wgetでブラウザから開いたのと同じ状態にしてやります。
で、ダウンロードしたくないので「–spider」オプション(Web スパイダーとして動作する)を付与します。
wgetにそんな使い方があったとは…