質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.46%

  • WordPress

    9167questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

  • sh

    352questions

    shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

  • cron

    222questions

    cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

WP-Cronをサーバー側のCronで定期的に実行させたいができない

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,376
退会済みユーザー

退会済みユーザー

質問内容

こんにちは。さくらレンタルサーバーでWordPressを運営しています。
常時SSL・マルチサイト・独自ドメイン接続済みです。

定期的にWP-Cronを動かしたいため、wp-cron.phpを停止して
サーバのcronで定期的に実行させたいと思っているのですが、どうもできずにいます。

以下のサイトを元に色々試してみました。
自分でhttp://example.com/wordpress/wp-cron.phpに直接アクセスしたところ
レポートメールが届いたので、WP-Cronがちゃんと動いた事になります。

なお、WP-Cronが動いたか判断する材料として
プラグインのレポートメールが届いたかどうかを判断の基準にしています。

将来的に複数のサイトを運営するかもしれないので、
できれば「やってみた方法2」みたいに複数指定できれば嬉しいですが。

どこが間違っているのかご教授頂けるととても嬉しいです。
回答お待ちしています。

参照サイト:
https://mtfield.net/wp-cron/
http://company.nankikumano.jp/contents/tech_info/313/
http://senrioka-info.net/0_google_sitemap/cron.htm

やってみた方法1:

サーバーのcronに直接アクセスするように入力した
→WP-Cronが動いた形跡がない。(レポートメール不達)

cd /home/***/www/example/wodpress ; /usr/local/bin/php wp-cron.php

やってみた方法2:

参照サイトを元に
サーバーcron→ /home/***/www/file/cron/wp-cron.sh 1> /dev/null
以下はwp-cron.sh(パーミッション700・文字EUC-JP・改行LF)の内容。

#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
cd /home/***/file/cron

wget https://example.com/wordpress/wp-cron.php -O result1


→以下のようなメール(実行された?一部伏せてます)が
postmaster宛に届いたがWP-Cronが動いた形跡がない。(レポートメール不達)
なんで" 1> /dev/null"でメール不達の設定にしたのにメールが届いたのか不明。

cd: /home/***/file/cron: No such file or directory 
--2017-XX-XX 00:00:00--  https://example.com/wordpress/wp-cron.php 
Resolving example.com... 000.00.000.00, 000:0a00:000:e:000:00:000:00 
Connecting to example.com|000.00.000.00|:443... connected. 
HTTP request sent, awaiting response... 301 Moved Permanently 
Location: https://example.com/wordpress/wp-cron.php [following] 
--2017-XX-XX 00:00:00--  https://example.com/wordpress/wp-cron.php 
Reusing existing connection to example.com:443. 
.
.
.
20 redirections exceeded. 

追記

ご回答ありがとうございます。回答の方法をやってみて
少し気になる事があったので追加でやってみた方法とエラーメッセージを掲載しておきます。


参照サイトそのままの方法でやってみた。@1
サーバーCron→ /home/***/www/file/cron/wp-cron.sh

#!/bin/sh

cd /home/***/cron
wget http://example.com/wordpress/wp-cron.php -O result1


postmasterメール内容(恐らくエラー内容)

cd: /home/***/cron: No such file or directory 
/home/***/www/file/cron/wp-cron.sh: wget: not found 

参照サイトそのままの方法でやってみた。@2
サーバーCron→ /home/***/www/file/cron/wp-cron.sh

#! /bin/sh
#
# Wordpressのwp-cron.phpの実行
#
curl http://example.com/wordpress/wp-cron.php

exit 0


postmasterメール内容(恐らくエラー内容)

/home/***/www/file/cron/wp-cron.sh: curl: not found 

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

必要なことはwp-cron.phpへの外部からのGETだけなので
cronの設定でこれだけです。cdとか不要。

*/5 * * * * curl http://example.com/wp/wp-cron.php

最後のエラー見るとhttpsが原因っぽいのでURLだけよく確認してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/08 16:48

    こんにちは。早速のご回答ありがとうございます。

    提示された方法を試してみましたところ、postmaster宛に
    "curl: not found "と返って来て正常に動作されていないようでした。

    このエラーメッセージに少し見覚えがあったので、質問に追記というかたちで
    試した方法とpostmaster宛に送られたエラーメッセージを掲載しておきました。
    URLはhttpで、wp-cron.shに書いてみたURLはきちんと確認したので間違えは無いはずです。

    なにか原因があって"curl: not found "が返ってくるようですが原因が分かりません。
    お手数ですが、再び回答頂けると幸いです。

    キャンセル

  • 2017/11/09 20:41 編集

    その後色々試行錯誤しまして、サーバーのCron→
    cd /home/***/www/file/cron;/bin/csh /home/***/www/file/cron/wp-cron.sh
    wp-cron.shの内容→
    #! /bin/sh
    #
    # Wordpressのwp-cron.phpの実行
    #
    curl https://example.com/wordpress/wp-cron.php

    exit 0
    で実行しましたところ、以下のようなpostmasterメールが届きました。

    -----

    % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed
    0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 249 100 249 0 0 1934 0 --:--:-- --:--:-- --:--:-- 2349
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>301 Moved Permanently</title>
    </head><body>
    <h1>Moved Permanently</h1>
    <p>The document has moved <a href="https://example.com/wordpress/wp-cron.php&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

    -----

    もしかして"curl: not found"と関係あるかもしれませんが、対処方法までは分かりません。
    http・httpsでも同じようなメッセージが返ってきました。
    これはhttpsの方のメッセージです。

    キャンセル

check解決した方法

0

こんにちは。回答をヒントにあれから苦心しながら原因を探って
ようやく解決方法が見つかりました。回答頂き改めてありがとうございました。


example (example.com) →.htaccess(●)
└ WordPressディレクトリ(example.com/wordpress/) →.htaccess(▲)

普段WordPressディレクトリに分けてHPを運営しているのですが、
SSL化の際書き加えた.htaccessが原因で301ループ?を起こしているようでした。
●・▲両方に(wp-cron.php除外はディレクトリに合わせて変えてました)以下を
書いていたのですが、この記述は●.htaccessだけに書くのが正しかったようです。

# BEGIN Force SSL for SAKURA
# RewriteしてもHTTPS環境変数を有効にする
SetEnvIf REDIRECT_HTTPS (.*) HTTPS=$1
# 常時HTTPS化(HTTPSが無効な場合リダイレクト)
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{ENV:HTTPS} !on
RewriteCond %{REQUEST_URI} !^/wordpress/wp-cron.php$
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
# END Force SSL for SAKURA

そのうえで、wp-cron.shを作成し(属性700・改行LF)

#! /bin/sh
#
# Wordpressのwp-cron.phpの実行
#
curl https://example.com/wordpress/wp-cron.php

exit 0


さくらのサーバーのCronに以下のように指定を入れます。
cd /home/アカウント名/www/ファイルの場所;/bin/csh /home/アカウント名/www/ファイルの場所/wp-cron.sh > /dev/null 2>&1

curlは何故かちゃんと動いてくれませんでした。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.46%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • WordPress

    9167questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

  • sh

    352questions

    shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

  • cron

    222questions

    cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。