cronは、あるコマンドを設定したスケジュール(時間)に従って実行してくれるコマンドです。
ざっくり言うと、
タイマーだよ
cronにはWordPress上で動くWP-cronとUNIX系OSのcronがあります。
KUSANAGIのCentOSもUNIX系OSの一つであり、後者のcronが積まれています。
(以下、KUSANAGIのcronは単にcronとします)
WP-cronは予約投稿やプラグインの自動更新に使われる便利な機能です。
しかし一方で、サイトアクセスがある毎に作動するためパフォーマンスに悪影響を及ぼします。
また、サイト攻撃で狙われやすい対象でもあります。
よって対策しておくに越したことはありません。
本稿ではKUSANAGIでWp-cronを停止してパフォーマンスとセキュリティの改善を図ります。
wp-cron.phpを停止する
wp-config.phpに次の記述をします。
define('DISABLE_WP_CRON', 'true');
試しに投稿予約をしてテスト投稿してみてください。
時間が過ぎても予約投稿が失敗しているはずです。
crontabを編集してwp-cron.phpを定期的に叩く
しかしこのままでは投稿予約その他ができなくなってしまいます。
この点、
なのでOSのcronを利用してwp-cron.phpを定期実行します。
具体的にはcrontabを編集します。
ターミナルにログイン。
次のコマンドを入力します。
# crontab -e
編集画面が開きます。
KUSANAGIの場合、恐らく次の記述がされていると思います。
07 03 * * 0 /opt/kusanagi/bin/kusanagi update cert
この下に次の記述を追加します。
*/10 * * * * /usr/local/bin/php -q /home/kusanagi/【プロファイル名】/DocumentRoot/wp-cron.php > /dev/null 2>&1
以下、最小限必要な説明のみさせていただきます。
「*/10」は「10分ごと」の意味です。
ここを「10」にすると「毎時10分」になります。
御自身の用途に応じて変更してください。
今回の目的ですと左端と左から2番目までしか使わないでしょうから説明はそこまでにとどめます。
設定できる数字はそれぞれ「0-59」と「0-23」です。
crontabにはユーザー名オプションもありますが今回は不要です。
/dev/null 2>&1
これはログ出力。
エラー出力を標準出力ファイルにマージします(まとめます)。
編集画面を閉じてcronを再起動します。
systemctl restart crond.service
今回設定したファイルは次の場所にあります。
/var/spool/cron
cronの動作確認・テスト
予約投稿テスト
テスト投稿を作成します。
適当に投稿予約の設定をして、cronで設定した間隔の時間がすぎるまで待ちます。
13時12分に記事を書く
→13時15分に投稿予約
→13時18分に予約失敗しているのを確認
→13時22分に「公開済み」になっているのを確認
ログの確認
ログからcronが動いているか確認します。
less +F /var/log/cron
動いていれば設定した時刻に「CMD」「CMDEND」が表示されています。
「less +F」はログを見るコマンド。
もっと知りたければこちらを御覧ください。
参考記事
【Ubuntu】cronでsudoを実行するにはどうすれば。
まとめ
めんどくさい……
でもKUSANAGI使うのはパフォーマンス求めてのはず
だったらやれることはやった方がいいと思うわ