Human MadeのCavalcadeをAMIMOTOにインストールする
WP Cronがたまに不安定なので、Human Madeチームが利用しているCavalcadeを勝手に触ってみました。 WPは基本的にAMIMOTOで利用するので、AMIMOTOのEC2で動かしてみます。 セットアップ […]
広告ここから
広告ここまで
目次
WP Cronがたまに不安定なので、Human Madeチームが利用しているCavalcadeを勝手に触ってみました。
WPは基本的にAMIMOTOで利用するので、AMIMOTOのEC2で動かしてみます。
セットアップ
SSHでEC2インスタンスに接続した状態で作業します。
# WordPressのルートディレクトリへ移動
$ cd /var/www/vhosts/i-xxxx
# mu-pluginsに移動
$ cd wp-content/mu-plugins
# プロジェクトをClone
$ git clone https://github.com/humanmade/Cavalcade.git
# ロード用mu pluginを作成
$ vim cavalcade.php
cavalcade.phpのコード
説明文とソースを読み込むコードだけ記述しています。
<?php
/**
* Plugin Name: Cavalcade
* Plugin URI: https://github.com/humanmade/Cavalcade
* Description: A better wp-cron. Horizontally scalable, works perfectly with multisite.
* Author: Human Made
* Author URI: https://hmn.md/
* Version: 1.0.0
* License: GPLv2 or later
*/
require_once __DIR__ . '/Cavalcade/plugin.php';
成功すれば以下のように管理画面にCavalcadeが表示されます。
WP Cronの停止
Cavalcadeでcronジョブを実行しますので、wp-cronは停止します。
wp-config.phpに以下の1行を追加しましょう。
define( 'DISABLE_WP_CRON', true );
Runnerをインストールする
Cavalcadeを実行するためのランナーを追加します。
公開領域に置くものでもありませんので、今回はユーザーのディレクトリへ置いておきます。
$ cd ~/
$ git clone https://github.com/humanmade/Cavalcade-Runner.git
Runnerを実行する
最後にrunnerをnohup
で実行させます。
$ sudo touch /var/log/cavalcade.log
$ sudo chown ec2-user:ec2-user /var/log/cavalcade.log
$ nohup ./Cavalcade-Runner/bin/cavalcade /var/www/vhosts/i-xxxxxxxx/ > /var/log/cavalcade.log &
実行されていることを確認しましょう。
$ ps aux | grep Cavalcade
ec2-user 7350 0.0 2.1 379852 21380 pts/0 S 04:10 0:00 php ./Cavalcade-Runner/bin/cavalcade /var/www/vhosts/i-xxxx/
ec2-user 7353 0.0 0.2 110516 2124 pts/0 S+ 04:11 0:00 grep --color=auto Cavalcade
/var/log/cavalcade.logで記録も見れます。
$ tail -f /var/log/cavalcade.log
[stopped] =>
[exitcode] => 0
[termsig] => 0
[stopsig] => 0
)
[13] Worker shutting down...
[13] Worker out:
[13] Worker err:
[13] Worker ret: 0
[14] Running wp cavalcade run 14 (publish_future_post a:1:{i:0;i:5;})
[14] Started worker
[14] Worker status: Array
(
[command] => wp cavalcade run 14
[pid] => 7399
[running] =>
[signaled] =>
[stopped] =>
[exitcode] => 0
[termsig] => 0
[stopsig] => 0
)
[14] Worker shutting down...
[14] Worker out:
[14] Worker err:
[14] Worker ret: 0
WP CLIで情報を見る
Cavalcadeの情報はWP CLIのwp cavalcade
コマンドで見れます。
ジョブの一覧
$ wp cavalcade jobs
+----+------+------------------------------------+---------------------+---------------------+---------+
| id | site | hook | start | nextrun | status |
+----+------+------------------------------------+---------------------+---------------------+---------+
| 7 | 1 | wp_privacy_delete_old_export_files | 2019-07-31 09:02:26 | 2019-07-31 09:02:26 | waiting |
| 8 | 1 | wp_version_check | 2019-07-31 20:02:26 | 2019-07-31 20:02:26 | waiting |
| 9 | 1 | wp_update_plugins | 2019-07-31 20:02:26 | 2019-07-31 20:02:26 | waiting |
| 10 | 1 | wp_update_themes | 2019-07-31 20:02:26 | 2019-07-31 20:02:26 | waiting |
| 11 | 1 | wp_scheduled_delete | 2019-08-01 08:02:26 | 2019-08-01 08:02:26 | waiting |
| 12 | 1 | delete_expired_transients | 2019-08-01 08:02:26 | 2019-08-01 08:02:26 | waiting |
| 13 | 1 | wp_scheduled_auto_draft_delete | 2019-07-31 08:11:39 | 2019-08-01 08:11:39 | waiting |
| 14 | 1 | publish_future_post | 2019-07-31 08:15:39 | 2019-07-31 08:15:39 | waiting |
+----+------+------------------------------------+---------------------+---------------------+---------+
実行ログ
–formatオプションで出力をいろいろ変えれます。
$ wp cavalcade log
+-----+--------------------------------+---------------------+-----------+
| job | hook | timestamp | status |
+-----+--------------------------------+---------------------+-----------+
| 13 | wp_scheduled_auto_draft_delete | 2019-07-31 04:11:41 | completed |
+-----+--------------------------------+---------------------+-----------+
$ wp cavalcade log --format=yaml
---
-
job: "13"
hook: wp_scheduled_auto_draft_delete
timestamp: 2019-07-31 04:11:41
status: completed
$ wp cavalcade log --format=csv
job,hook,timestamp,status
13,wp_scheduled_auto_draft_delete,"2019-07-31 04:11:41",completed
$ wp cavalcade log --format=json
[{"job":"13","hook":"wp_scheduled_auto_draft_delete","timestamp":"2019-07-31 04:11:41","status":"completed"}]
手動実行
$ wp cavalcade jobs
+----+------+------------------------------------+---------------------+---------------------+-----------+
| id | site | hook | start | nextrun | status |
+----+------+------------------------------------+---------------------+---------------------+-----------+
| 7 | 1 | wp_privacy_delete_old_export_files | 2019-07-31 09:02:26 | 2019-07-31 09:02:26 | waiting |
| 8 | 1 | wp_version_check | 2019-07-31 20:02:26 | 2019-07-31 20:02:26 | waiting |
| 9 | 1 | wp_update_plugins | 2019-07-31 20:02:26 | 2019-07-31 20:02:26 | waiting |
| 10 | 1 | wp_update_themes | 2019-07-31 20:02:26 | 2019-07-31 20:02:26 | waiting |
| 11 | 1 | wp_scheduled_delete | 2019-08-01 08:02:26 | 2019-08-01 08:02:26 | waiting |
| 12 | 1 | delete_expired_transients | 2019-08-01 08:02:26 | 2019-08-01 08:02:26 | waiting |
| 13 | 1 | wp_scheduled_auto_draft_delete | 2019-07-31 08:11:39 | 2019-08-01 08:11:39 | waiting |
| 14 | 1 | publish_future_post | 2019-07-31 08:15:39 | 2019-07-31 08:15:39 | completed |
| 15 | 1 | do_pings | 2019-07-31 08:15:41 | 2019-07-31 08:15:41 | completed |
+----+------+------------------------------------+---------------------+---------------------+-----------+
$ wp cavalcade run 7
cavalcadeのDBアップグレード
$ wp cavalcade upgrade
Success: Database upgrade not required.
おわりに
wp cronをcronで実行する方法はいろいろと紹介されていますが、alternativeなライブラリというのはあまり無い気がします。
Cavalcadeもう少し触ってみて、なにかあればまたブログにまとめます。