2

cron を使用して、Ubuntu サーバーで perl スクリプトを実行しようとしています。私は3つのperlスクリプトを持っています:

  • works.pl (ターミナルから動作します。cron ジョブとして動作します)
  • fails.pl (端末から動作します。cron ジョブとして失敗します)
  • functions.pl (すべての共有関数はここに格納されます)

「works.pl」と「fails.pl」の唯一の違いは、「fails.pl」が「functions.pl」を参照するrequire()ステートメントを使用していることです。「Fails.pl」は「functions.pl」を参照していません。

追加情報

  • すべての perl スクリプトは、パブリック フォルダーの外にある同じフォルダーにあります。
  • すべての perl スクリプトに同じ権限 (740) があります。

何か案は?私のユーザーレベルは初心者です:-)

ありがとう。

4

2 に答える 2

3

require@INC配列にリストされているディレクトリのいずれかでスクリプトを見つけようとします。通常、この配列には現在のディレクトリが含まれてい.ます。したがって、現在のディレクトリがそこにあるディレクトリである場合functions.pl、実行は機能するfails.plはずです。

これを実現するには 2 つの方法があります。まず、スクリプトを実行する前にディレクトリを変更します。たとえば (cron エントリの例)。

5 12 * * * cd /home/user/path/to/script ; ./fails.pl

次に、これを の先頭近くに置くことで、コンパイル時にスクリプトを見つける場所を Perl に伝えますfails.pl

BEGIN {
  unshift @INC, "/home/user/path/to/script";
};
于 2012-08-26T14:34:32.843 に答える