mixhostでwp-cronをcronに任せる方法
wordpressで定期的に行っている作業は自動で行うようにしましょう。また、wordpressが機能として持っているwp-cronではなくcronで作動させるようにする方法を紹介します。
なぜwp-cronではなくcronにするのかというとwp-cronも自動的に作業は行ってくれるのですが、wp-cronはサイトにアクセスがないと動作しません。
例)
毎日06:00に my_functionの実行命令を登録しておく。(毎日06:00に my_functionが動作することを期待)
実際には毎日06:00移行に初めてサイトにアクセスがあった際にmy_functionが呼び出される。
これでは必ず同じ時間に動作させたい場合にこれでは困ります。そこでwp-cronに登録されている命令をcronに任せることでサーバー時間をもとに定時実行することが可能になります。
wordpressの作業をcron登録する
まずwordoressの作業をwp-cronで動くように記述していきます。
function my_function() {//処理}add_action ( 'my_function_cron', 'my_function' );if ( !wp_next_scheduled( 'my_function_cron' ) ) {date_default_timezone_set('Asia/Tokyo');wp_schedule_event( wp_date( 'U', strtotime('tomorrow 06:00:00') ), 'daily', 'my_function_cron' );}
定期的に行いたい処理をmy_functionとし、my_function_cronというアクションにフックします。
my_function_cronがスケジュールされていなければ、タイムゾーンを日本に設定し、my_function_cronをスケジュールします。
これで、毎日6時スケジュールされます。wp_schedule_eventの使い方はリファレンスを参考にしてください。
wp-cronを停止する
wp-cronをcronに任せるためにまずはwordpress側でwp-cronを停止する必要があります。
停止するためには以下をwp-config.phpに記述します。
define('DISABLE_WP_CRON', 'true');
記述する場所はデバッグ記述の後で問題ありません。
cPanelからcronジョブを追加する
cPanel管理画面から「詳細」→「cronジョブ」をクリックします。
cronの作業でエラーが出た際にメールで受け取りたい場合はメールをアドレスを入力し「電子メールの更新」ボタンをクリックします。
次に「新しい cron ジョブの追加」を行っていきます。
共通設定から1分間に1回の「* * * * *」を選びます。cron実行したことある人は見慣れたものかもしれません。
続いてコマンドです。
「php /home/(ユーザー名)/public_html/wp-cron.php >/dev/null」
phpの部分は「/usr/local/bin/php」と同じです。
その次に実行ファイル名の場所を指定しています。サブドメインなどではなく通常の形では「public_html」の直下にwp-cron.phpがあるはずです。
最後の部分「> /dev/null」は標準出力を/dev/nullに捨てています。よく見かける形としては「2>&1」がついたパターンです。これは標準エラー出力を標準出力にマージするという意味合いです。
併せると標準エラー出力を標準出力にマージして/dev/nullに捨てています。
その場合エラーがあった場合には標準エラー出力捨てられてしまうため原因がわかりません。標準エラー出力が出力された場合は知りたいので今回この記述はしません。メールアドレスが登録してある場合にはメールアドレスに標準エラー出力の内容が通知されます。