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

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

新規登録して質問してみよう
ただいま回答率
85.50%
cron

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

WordPress

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

sh

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

Q&A

解決済

2回答

828閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

cron

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

WordPress

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

sh

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

0グッド

0クリップ

投稿2017/11/08 05:21

編集2017/11/08 07:40

###質問内容
こんにちは。さくらレンタルサーバーで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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

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

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

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

投稿2017/11/08 06:54

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/11/08 07:48

こんにちは。早速のご回答ありがとうございます。 提示された方法を試してみましたところ、postmaster宛に "curl: not found "と返って来て正常に動作されていないようでした。 このエラーメッセージに少し見覚えがあったので、質問に追記というかたちで 試した方法とpostmaster宛に送られたエラーメッセージを掲載しておきました。 URLはhttpで、wp-cron.shに書いてみたURLはきちんと確認したので間違えは無いはずです。 なにか原因があって"curl: not found "が返ってくるようですが原因が分かりません。 お手数ですが、再び回答頂けると幸いです。
退会済みユーザー

退会済みユーザー

2017/11/09 13:16 編集

その後色々試行錯誤しまして、サーバーの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">here</a>.</p> ----- もしかして"curl: not found"と関係あるかもしれませんが、対処方法までは分かりません。 http・httpsでも同じようなメッセージが返ってきました。 これはhttpsの方のメッセージです。
guest

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は何故かちゃんと動いてくれませんでした。

投稿2017/11/12 07:19

編集2017/11/12 07:23
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問