
Ubuntu日本語フォーラム

ログインしていません。
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で実行する場合の違いってどこかにまとまっていたりしますか?
オフライン
Plagger全般で
http://www.nobodyplace.com/mutter/2006/09/20/213000.php
http://zeromemory.sblo.jp/article/1218678.html
という感じです。
# 詳細はPlaggerのドキュメントに書いてあったような気がします。
オフライン
>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が得られました
オフライン
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のソースを貼ってもらうと何か思いつくかもしれません。
オフライン
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 の場所ですね
オフライン
・食べさせるXMLのDTDには辿り着けますか?
これが問題みたいでした,問題が起きているのはプロキシ環境でしたが
イントラのRSSフィードだからプロキシ設定は必要ないと思っていたのですが
DTDにアクセスするために外部へ接続する必要があったのですね
fedoraから環境を移行していたのですが,このようなcronの動作の差異はディストリビューション依存ということでしょうか?
オフライン
もしかしてxmlcatalogコマンド(libxml2-utilsパッケージ)が入ってない
とかどうでしょうか。xmlcatalogはlibxml2(LibXMLの先で使われるライブラリ)が
DTDを収集するのに必要です。
もしくは/usr/binへのPATHが通ってないか。
Red Hat系ではlibxml2パッケージにxmlcatalogも含まれていますが、Debian/Ubuntu
ではlibxml2-utilsという別のパッケージに収録されています。
というか、cron外からなら動くのだから外部接続性は関係なくて、純粋に
PATHかLIBの問題のような気がしてなりません。
オフライン