Cent OS 7 を実行しており、Perl スクリプトを呼び出して、Plex メディア サーバーの Over the Air TV Guide データを XML に更新しようとしています。
問題は、Cron がスクリプトを実行しないことです。
シェルでスクリプトを実行すると、次のコマンドで正常に実行されます。
/usr/bin/perl /home/Media/Misc/TVXML/hr_epg.pl > /home/Media/Misc/TVXML/test.xml
cron 経由で実行する場合 (テストのため 1 分ごとに実行):
* * * * * /usr/bin/perl /home/Media/Misc/TVXML/hr_epg.pl > /home/Media/Misc/TVXML/test.xml
何も起こりません。
したがって、次のようにcronを実行すると、
* * * * * /usr/bin/perl /home/Media/Misc/TVXML/hr_epg.pl > /home/Media/Misc/TVXML/test.xml var1 var2 &>>/home/Media/Misc/TVXML/cron.log
cron.log のエクスポート:
/home/Me$ の @INC (@INC には /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 が含まれています。) で JSON.pm が見つかりません。BEGIN が失敗しました。/home/Media/Misc/TVXML/hr_epg.pl の 4 行目でコンパイルが中止されました。
4行目: use JSON;
Perl チェック:
perl -E'$^X' とします /usr/bin/perl
cpanJSON:
cpan JSON 読み取り '/root/.cpan/Metadata' データベースは、2019 年 6 月 29 日土曜日 00:55:31 GMT に生成されました。LWP で取得中: http://mirrors.namecheap.com/CPAN/authors/01mailrc.txt.gz '/root/.cpan/sources/authors/01mailrc.txt.gz' を読み込んでいます ................................................................................完了 LWP で取得しています: http://mirrors.namecheap.com/CPAN/modules/02packages.details.txt.gz '/root/.cpan/sources/modules/02packages.details.txt.gz' を読み込んでいます。データベースは、2019 年 6 月 30 日 (日) 01:56:15 GMT に生成されました ............. 新しい CPAN.pm バージョン (v2.26) が利用可能です。[現在実行中のバージョンは v1.9800 です] CPAN をインストールして cpan を再ロードし、現在のセッションを終了せずに CPAN.pm をアップグレードして新しいバージョンを実行することをお勧めします。
..........................................................完了 LWP によるフェッチ: http://mirrors.namecheap.com/CPAN/modules/03modlist.data.gz '/root/.cpan/sources/modules/03modlist.data.gz' の読み取りが完了しました。/root/.cpan/Metadata JSON の書き込みは最新です (4.02)。
JSON が存在し、このスクリプトは CLI 経由で実行されるため、誰かが私に何らかの支援を与えてくれるとありがたいです。
ありがとう
答え1
@INC
cron によって実行されたものと、@INC
ターミナルで手動で実行されたものとの間に矛盾があるようです。
いずれにしても、ライブラリがあるディレクトリを見つけます。locate JSON.pm
ディレクトリが だとすると/usr/libs
、スクリプトの先頭に次の行を追加します。
use lib '/usr/libs";