以下の外部の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
さくらのコマンドパスを添付します。
よろしくお願いします。
$html = file_get_contents($url);
たとえば、ブラウザからは上記はOKでも
cronなどのスクリプトからは駄目なサーバーはあります。
ご存知のとおり
URLをファイルのように扱うには allow_url_fopen がonになっていないといけないのですが
スクリプトの実行時は、offになっているという場合です。
エラーレベルをE_ALL にして
エラーログをはくようにすれば何らかの警告ぐらいはでてると思うのですがどうでしょうか?
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
これは何でしょうか?
>うまく動かないというのは、どういう現象ですか?
ブラウザからたたくのと、さくらのcron設定からたたくので、
1.出力されるページが違う
2.メールを送信するためのcronなのですが、さくらからたたくとメールが送られない
ということです。
>cd /home/ドメイン/www/ ; /usr/local/bin/php index.php?option=com_community&task=cron
>これは何でしょうか?
URLからたたくのではなく、内側からたたこうとしたけれど、失敗した例です。
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' );
これでも、さらにこれに加えてパスの指定っているんですかね?
さくらのコントロールパネルから、php.iniで特別な設定などはしていませんか?
その場合、-cオプションで'php -c /home/*username*/www/php.ini index.php'のようにして読み込ませる必要があった気がします。
べつのやり方で解決できてしまったため、今回の件に関しては、これは試しませんでした。
ご提案ありがとうございました。
$html = file_get_contents($url);
たとえば、ブラウザからは上記はOKでも
cronなどのスクリプトからは駄目なサーバーはあります。
ご存知のとおり
URLをファイルのように扱うには allow_url_fopen がonになっていないといけないのですが
スクリプトの実行時は、offになっているという場合です。
エラーレベルをE_ALL にして
エラーログをはくようにすれば何らかの警告ぐらいはでてると思うのですがどうでしょうか?
調べてみましたら、おっしゃるとおり、どうやらさくらでは引数を含む動的な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
調べてみましたら、おっしゃるとおり、どうやらさくらでは引数を含む動的な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