これまで、さくらのクラウドでの CentOS 7 のインストールから Nginx サーバを立てて WordPress をマルチサイトでインストールするまでの流れを書いてきましたが、その中でもいくつか課題が出てきているので書いておきます。
サーバ cron が00分ジャストに動いてくれない
WordPress は予約投稿などの反映に、 WordPress の機能として実装されている
「擬似 cron 」を使っています。
WordPressへのアクセスはどんな場合でも、 wp-cron.php を経由してから目的のページを表示する仕組みになっています。
この wp-cron.php へのアクセスが、「擬似 cron 」発動のきっかけとなるわけです。
つまり、 WordPress で 4月4日 AM10:00 に予約投稿していたとしても、その時間帯にアクセスがなければ、投稿されることはありません。 Twitter や Facebook への自動投稿もされません。そのため、私はサーバ側の cron 機能を利用して、毎時00分に wp-cron.php をつついて自動投稿を実現しています。
しかし、困ったことに00分ジャストには投稿されていない模様。
Twitter や Facebook を見てみると毎時01分に投稿されていて、サーバのログを見ても同様。
cron の仕様として、投稿をさせたい1分〜2分前にcronが動き始めるようにすると目的の時間に投稿がされるという情報を得たので、次のいくつか試してみました。
1 2 3 4 5 6 7 |
#nginx ユーザで、毎時00分、58分、59分、に発動(実際に試す時は一度にまとめず、1つずつテスト) 0 * * * * nginx /usr/bin/php -q /usr/share/nginx/example.jp/wp-cron.php >/dev/null 2>&1 58 * * * * nginx /usr/bin/php -q /usr/share/nginx/example.jp/wp-cron.php >/dev/null 2>&1 59 * * * * nginx /usr/bin/php -q /usr/share/nginx/example.jp/wp-cron.php >/dev/null 2>&1 #nice ユーザで優先度を上げ、毎時58分に発動(上記を削除して置き換え) 58 * * * * nice -n -10 /usr/bin/php -q /usr/share/nginx/example.jp/wp-cron.php >/dev/null 2>&1 |
どれもうまく行かず、ログを見てみるとそれぞれ設定した時間に発動はしているものの、最終的に実行されているのは毎時01分。
ちなみに、15分とか30分に実行させたい時は1分前の14分や29分に設定しておくと、Twitterへの投稿はきちんと15分や30分に反映される。
なんじゃこりゃー・・・と思いつつ、個人ブログなのでそこまで問題視することもなく、半ば諦めています。いつかきちんと調べないとなぁ。。。
ちなみに、ログはこんな感じ。誰か詳しい人いませんか? どうしてこうなるのか、よかったら教えてください。何か優先順位の高いものが cron よりも優先して動いているのではないかという推測はできるのだけれど、「何がそうなっているのか」が突き止められないでいます。
1 2 3 4 5 6 7 8 9 10 11 |
# nginx ユーザで23時00分に発動した場合 Mar 28 23:00:01 hoge CROND[9418]: (nginx) CMD (/usr/bin/php -q hogehoge/wp-cron.php >/dev/null 2>&1) Mar 28 23:01:01 hoge CROND[9427]: (root) CMD (run-parts /etc/cron.hourly) Mar 28 23:01:01 hoge run-parts(/etc/cron.hourly)[9427]: starting 0yum-hourl y.cron Mar 28 23:01:01 hoge run-parts(/etc/cron.hourly)[9434]: finished 0yum-hourl y.cron # nice で17時58分に発動した場合 Mar 29 17:58:01 hoge crond[13172]: (nice) ERROR (getpwnam() failed) Mar 29 18:01:02 hoge CROND[13282]: (root) CMD (run-parts /etc/cron.hourly) Mar 29 18:01:02 hoge run-parts(/etc/cron.hourly)[13282]: starting 0yum-hour ly.cron Mar 29 18:01:02 hoge run-parts(/etc/cron.hourly)[13289]: finished 0yum-hour ly.cron |
Nginx の Proxy cacheがうまく設定できない
Nginx という高速環境を手に入れた今、もっと高速化したいという欲望がないわけがありません!
そう、Nginx の最大の特徴ともいえる、 Nginx proxy cache を実現しようとしたのですが、参考サイトを参照しながら実行すると、 Nginx の再起動はできるものの、 WordPress にアクセスしようとするとアドレスバーに 「 ?=backend 」 の文字と、リダイレクトループをしているような Chrome の文言。。。
いろいろ試したいのだけれど、テスト環境がなく積極的に試せないので、どうしようかなぁというところです。
RAID 的な何かをするか、全く別のところに別のドメインを当ててテスト環境(というか実験環境)を作りたいところだけど。。。
ちなみに、この件で参考にさせていただいたのはこちらの記事。マルチサイトでなく通常の WordPress の構築ならうまくいくのかもしれないし、本当はそれを試してからこのことを書くつもりだったのだけれど、試さないうちに書いちゃいました。すみません。
Nginx + WordPress proxy cache篇 « サーバーワークス エンジニアブログ
WordPress からのメールが飛んでこなかった
通常、 WordPress のセットアップが完了するとその時点で当該の WordPress からセットアップ完了のメールが届きますが、私の環境では届きませんでした。
メールフォームなどから送られてくるメール(送信者がそのサーバのドメインとは違うメールアドレスを使用しているメール)については届くのだけれど、 example.jp というドメインを運用しているサーバで example.jp 宛のメールを送ろうとすると、届かない模様。
今回、同一ホスト上にメールサーバは立てていません。
さくらのクラウドのCentOS 7 で、postfix を起動するだけで特に設定する必要もなしに、問題なくどんなメールも受け取れると教えてもらったことがありますが、私の場合はちょっとした設定が必要でした。
このあたりのことは、また別途詳しく書こうと思います。
【2016年11月15日 追記】
「詳しく書こうと思います」なんて書きながら全然書いていないので、参考にしたページのリンクを張っちゃいます。
PostfixなどのMTAからメールを送る際に自ホスト→自ホストにだけ届かない時の対処策 | Web Design Inspiration
上記のとおりにやったらできたはず…確か。
【2017年1月27日 追記】
上記よりこちらのほうが簡単でした。
Postfixによるメール送信設定 – 稲葉サーバーデザイン
念のため、設定部分のみ引用いたします。
1 2 3 4 5 6 7 8 9 10 |
#vim /etc/postfix/main.cf myhostname = example.jp mydomain = example.jp myorigin = $mydomain append_at_myorigin = yes append_dot_mydomain = yes inet_interfaces = localhost inet_protocols = ipv4 mydestination = localhost mynetworks = 127.0.0.1 |
さいごに
前回までは、 CentOS 7 に Nginx を使って WordPress をセットアップするまでを順を追って説明しました。
そのため、さくらのクラウドの CentOS 7 を使って運用を開始する際にやっておいたほうが良い設定(小ネタ系)など、一部の説明を省略しています。
次回以降、省略した部分の説明を詳しく書いていこうと思っています。