お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2008-01-16 03:58:17

kzgs
メンバ
登録日: 2007-12-18

cronと通常のSHELLでの実行環境の違い

PlaggerというPerlのツールを使用しているのですが,

plagger -c config.yaml

とSHELL上で実行すると正常に実行されるのに

crontab -e
      or
sudo crontab -e



* * * * * /usr/local/bin/plagger -e /home/NAME/config.yaml

だと

Plagger::Plugin::Aggregator::Simple [error] Parser http://sample_url/index.rss failed: Parsing content failed: No such file or directory at /usr/local/lib/perl/5.8.8/XML/LibXML.pm line 503. at /usr/local/share/perl/5.8.8/XML/Liberal.pm line 65

などとPerlのエラーが出てしまいます

cronで実行する場合と通常のSHELLで実行する場合の違いってどこかにまとまっていたりしますか?

オフライン

 

#2 2008-01-16 09:50:47

hito
管理者
登録日: 2007-03-18

Re: cronと通常のSHELLでの実行環境の違い

Plagger全般で
http://www.nobodyplace.com/mutter/2006/09/20/213000.php
http://zeromemory.sblo.jp/article/1218678.html
という感じです。

# 詳細はPlaggerのドキュメントに書いてあったような気がします。

オフライン

 

#3 2008-01-16 12:25:03

kzgs
メンバ
登録日: 2007-12-18

Re: cronと通常のSHELLでの実行環境の違い

>hitoさん

返答ありがとうございます

Plagger::Plugin::Aggregator::Simple [error] Parser http://sample_url/index.rss failed: Parsing content failed: No such file or directory at /usr/local/lib/perl/5.8.8/XML/LibXML.pm line 503. at /usr/local/share/perl/5.8.8/XML/Liberal.pm line 65

ただ上記エラー部以外の以下のような部分は正常に処理が行われていて

Plagger [info] plugin Plagger::Plugin::Subscription::Config loaded.

LibXML.pmを使わないconfigファイルは正常に処理されるので,Perlのパスの可能性は低いように思えます

XMLのフェッチまでは正常に行われている(cronの結果をメールで通知させるとXMLの中身が含まれていることから)のですが,それがパーサーに渡されていないようです.

cron実行時のカレントのパスが問題ではと思いましたが,echo `pwd` > path.txtをcronを流すと/home/USERNAMEが得られました

オフライン

 

#4 2008-01-16 13:05:50

hito
管理者
登録日: 2007-03-18

Re: cronと通常のSHELLでの実行環境の違い

kzgs による投稿:

Plagger [info] plugin Plagger::Plugin::Subscription::Config loaded.

LibXML.pmを使わないconfigファイルは正常に処理されるので,Perlのパスの可能性は低いように思えます

XMLのフェッチまでは正常に行われている(cronの結果をメールで通知させるとXMLの中身が含まれていることから)のですが,それがパーサーに渡されていないようです.

cron実行時のカレントのパスが問題ではと思いましたが,echo `pwd` > path.txtをcronを流すと/home/USERNAMEが得られました

なるほど。これだとPerl本体のPATH周りではなさそうですね。

パーサに渡らないのではなく、渡されたパーサが落ちてるように見えなくも
ないですが、
・食べさせるXMLのDTDには辿り着けますか?
・HOMEはセットされていますか?
・exportで吐く環境変数をすべてcronにセットすると直りますか?
といったあたりでしょうか。

dieしている前後のLibXML.pmのソースを貼ってもらうと何か思いつくかもしれません。

オフライン

 

#5 2008-01-16 14:24:30

kzgs
メンバ
登録日: 2007-12-18

Re: cronと通常のSHELLでの実行環境の違い

hito による投稿:

dieしている前後のLibXML.pmのソースを貼ってもらうと何か思いつくかもしれません。

落ちているのは
    else {
        eval { $result = $self->_parse_string( @_ ); };  ←ここ

        my $err = $@;
        $self->{_State_} = 0;
        if ($err) {
            chomp $err;
            $self->_cleanup_callbacks();
            croak $err;
        }

        $result = $self->_auto_expand( $result, $self->{XML_LIBXML_BASE_URI} );
    }
    $self->_cleanup_callbacks();
の場所で,”No such file or directory at  /usr/local/lib/perl/5.8.8/XML/LibXML.pm line 503."となっています
他のエラー箇所も全て $self->parse_string の場所ですね

オフライン

 

#6 2008-01-16 18:26:21

kzgs
メンバ
登録日: 2007-12-18

Re: cronと通常のSHELLでの実行環境の違い

・食べさせるXMLのDTDには辿り着けますか?

これが問題みたいでした,問題が起きているのはプロキシ環境でしたが
イントラのRSSフィードだからプロキシ設定は必要ないと思っていたのですが
DTDにアクセスするために外部へ接続する必要があったのですね

fedoraから環境を移行していたのですが,このようなcronの動作の差異はディストリビューション依存ということでしょうか?

オフライン

 

#7 2008-01-16 19:29:28

hito
管理者
登録日: 2007-03-18

Re: cronと通常のSHELLでの実行環境の違い

もしかしてxmlcatalogコマンド(libxml2-utilsパッケージ)が入ってない
とかどうでしょうか。xmlcatalogはlibxml2(LibXMLの先で使われるライブラリ)が
DTDを収集するのに必要です。
もしくは/usr/binへのPATHが通ってないか。

Red Hat系ではlibxml2パッケージにxmlcatalogも含まれていますが、Debian/Ubuntu
ではlibxml2-utilsという別のパッケージに収録されています。

というか、cron外からなら動くのだから外部接続性は関係なくて、純粋に
PATHかLIBの問題のような気がしてなりません。

オフライン

 

#8 2008-01-17 11:03:43

kzgs
メンバ
登録日: 2007-12-18

Re: cronと通常のSHELLでの実行環境の違い

プロキシの設定をcrontabに追加したら動いたようです
お騒がせいたしました

オフライン

 

Board footer

Powered by FluxBB