1298950166 さくらインターネットのcron設定について質問です。


以下の外部のcronサイトを使っていて、
http://www.setcronjob.com/
呼んでいるURLは以下です。
http://ドメイン/index.php?option=com_community&task=cron

この外部cronサイトから呼んでいるcron処理はうまくいっているんですが、さくらの内部のcron設定から同じことをやろうとするとうまく動いてくれません。
以下のように設定しましたが、動いてくれませんでした。

cd /home/ドメイン/www/ ; /usr/local/bin/php index.php?option=com_community&task=cron

/usr/local/bin/lynx lynx -source "http://ドメイン/index.php?option=com_community&task=cron"

外部cronサイトから呼んでうまくいっているのだから権限の問題ではないとおもうんですが、手掛かりがなくて困っています。
ここが違うのかもとか、こうしたらできるかもなど、なにか手掛かりを思いつく方がいましたらぜひ教えてください。

呼んでいるのは、joomlaのjomsocialというプラグイン用のcronです。
http://www.jomsocial.com/docs/Cron_Setup
さくらのコマンドパスを添付します。

よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2011/03/03 11:55:36
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:hanako393 No.4

回答回数1142ベストアンサー獲得回数87

ポイント30pt

$html = file_get_contents($url);

たとえば、ブラウザからは上記はOKでも

cronなどのスクリプトからは駄目なサーバーはあります。

ご存知のとおり

URLをファイルのように扱うには allow_url_fopen がonになっていないといけないのですが

スクリプトの実行時は、offになっているという場合です。

エラーレベルをE_ALL にして

エラーログをはくようにすれば何らかの警告ぐらいはでてると思うのですがどうでしょうか?

id:yuma_nishizaki

調べてみましたら、おっしゃるとおり、どうやらさくらでは引数を含む動的なURLをCRONで叩く事はできなさそうです。

(さくらから直接明確な回答をもらったわけではないので定かではありません。cronの書き方についてはサポート外だそうです。)

>URLをファイルのように扱うには allow_url_fopen がonになっていないといけないのですが

>スクリプトの実行時は、offになっているという場合です。

>エラーレベルをE_ALL にして

>エラーログをはくようにすれば何らかの警告ぐらいはでてると思うのですがどうでしょうか?

別のやり方で解決できてしまったため、これは試せませんでした。

ありがとうございます。

以下のやり方で解決しました。

ご参考まで。

1./components/com_community/cronjob.phpをテキストエディタで開く

2.次の行をコメントアウトする(先頭に//を追加)

//defined('_JEXEC') or die('Restricted access');

3.次の行を編集し保存する。

$hostname = 'ドメイン名';

4.JomSocialで、メールが送られるような操作を行う(友達になるなど)

5.JomSocialのメールキューにメールがPendingになっているのを確認する

5.ブラウザから次のURLにアクセスし「Cronjob processed. 」と表示されるか確認

http://ドメイン名/components/com_community/cronjob.php

6.実際にメールが送られているか確認

7.再度メールが送信されるような操作を行う

8.さくらのCRON設定で次を叩く

cd /home/ユーザ名/www/components/com_community/ ; /usr/local/bin/php cronjob.php

2011/03/03 11:51:40

その他の回答3件)

id:taroe No.1

回答回数1099ベストアンサー獲得回数132

ポイント30pt

Cronで実行してるのは

/usr/local/bin/lynx lynx -source "http://ドメイン/index.php?option=com_community&task=cron

だけですよね?

ブラウザでアクセスしてるのと同じですから、権限も何もいりません。

ブラウザから、http://ドメイン/index.php?option=com_community&task=cronにアクセスしてエラーにならない

かつ、/usr/local/bin/lynxが存在するのなら

問題なく動作するはずですが

うまく動かないというのは、どういう現象ですか?

http://senrioka-info.net/0_google_sitemap/cron.htm#設定ファイルで実行する

実行するコマンドに

/usr/local/bin/lynx lynx -source "http://ドメイン/index.php?option=com_community&task=cron

を設定するだけだと思います。



質問文の

cd /home/ドメイン/www/ ; /usr/local/bin/php index.php?option=com_community&task=cron

これは何でしょうか?

id:yuma_nishizaki

>うまく動かないというのは、どういう現象ですか?

ブラウザからたたくのと、さくらのcron設定からたたくので、

1.出力されるページが違う

2.メールを送信するためのcronなのですが、さくらからたたくとメールが送られない

ということです。

>cd /home/ドメイン/www/ ; /usr/local/bin/php index.php?option=com_community&task=cron

>これは何でしょうか?

URLからたたくのではなく、内側からたたこうとしたけれど、失敗した例です。

2011/03/01 15:35:54
id:Galapagos No.2

回答回数963ベストアンサー獲得回数89

ポイント30pt

その index.php は外部ライブラリを requireしていませんか?

もしそうなら、「さくらインターネット cronでphp実行の方法について。」の手順を試してみてください。

id:yuma_nishizaki

requireしているみたいです。

参考にしてやってみました

cd /home/アカウント/www; /usr/local/bin/php -d include_path='.:/home/アカウント/www/includes' index.php

これではだめでした。

.phpファイルの中でちゃんとパスの指定もしているみたいなんですが、

require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );

require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

これでも、さらにこれに加えてパスの指定っているんですかね?

2011/03/01 15:28:19
id:shak No.3

回答回数84ベストアンサー獲得回数2

ポイント30pt

さくらのコントロールパネルから、php.iniで特別な設定などはしていませんか?

その場合、-cオプションで'php -c /home/*username*/www/php.ini index.php'のようにして読み込ませる必要があった気がします。

id:yuma_nishizaki

べつのやり方で解決できてしまったため、今回の件に関しては、これは試しませんでした。

ご提案ありがとうございました。

2011/03/03 11:44:40
id:hanako393 No.4

回答回数1142ベストアンサー獲得回数87ここでベストアンサー

ポイント30pt

$html = file_get_contents($url);

たとえば、ブラウザからは上記はOKでも

cronなどのスクリプトからは駄目なサーバーはあります。

ご存知のとおり

URLをファイルのように扱うには allow_url_fopen がonになっていないといけないのですが

スクリプトの実行時は、offになっているという場合です。

エラーレベルをE_ALL にして

エラーログをはくようにすれば何らかの警告ぐらいはでてると思うのですがどうでしょうか?

id:yuma_nishizaki

調べてみましたら、おっしゃるとおり、どうやらさくらでは引数を含む動的なURLをCRONで叩く事はできなさそうです。

(さくらから直接明確な回答をもらったわけではないので定かではありません。cronの書き方についてはサポート外だそうです。)

>URLをファイルのように扱うには allow_url_fopen がonになっていないといけないのですが

>スクリプトの実行時は、offになっているという場合です。

>エラーレベルをE_ALL にして

>エラーログをはくようにすれば何らかの警告ぐらいはでてると思うのですがどうでしょうか?

別のやり方で解決できてしまったため、これは試せませんでした。

ありがとうございます。

以下のやり方で解決しました。

ご参考まで。

1./components/com_community/cronjob.phpをテキストエディタで開く

2.次の行をコメントアウトする(先頭に//を追加)

//defined('_JEXEC') or die('Restricted access');

3.次の行を編集し保存する。

$hostname = 'ドメイン名';

4.JomSocialで、メールが送られるような操作を行う(友達になるなど)

5.JomSocialのメールキューにメールがPendingになっているのを確認する

5.ブラウザから次のURLにアクセスし「Cronjob processed. 」と表示されるか確認

http://ドメイン名/components/com_community/cronjob.php

6.実際にメールが送られているか確認

7.再度メールが送信されるような操作を行う

8.さくらのCRON設定で次を叩く

cd /home/ユーザ名/www/components/com_community/ ; /usr/local/bin/php cronjob.php

2011/03/03 11:51:40

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません