web-dev-qa-db-ja.com

cronjobとしてのPerlスクリプトの実行は機能しませんが、手動での開始は機能します

3つのcronjobエントリ(crontab -l)があります。最初のエントリは、仮想マシンのLVMバックアップを作成するPerlスクリプトで、他の2つはmysqldumpを実行するshファイルです。

しかし、私はcrontab -eをルートとして編集し(Sudo su最初)、これが私の最初のジョブエントリです

# Run daily backup of my job at 3:15 [relation ä11]
15 3 * * * Perl /opt/AUTO_BACKUP/virt-backup.pl --action=dump --date --vm=SERVER2

ただし、バックアップディレクトリに出力を作成したり、cronログにエントリを作成したりすることはありません。 cronログファイルには、他のshジョブのエントリのみが見つかりました。

ただし、コマンドPerl /opt/AUTO_BACKUP/virt-backup.pl --action=dump --date --vm=SERVER2をルートターミナルにコピーすると、チャームのように機能します。したがって、crontabをルートとして編集するため、適切なユーザーのみがジョブを実行する必要があります。また、ログにエラーはありません。

1
TheMAn

Perlエントリをpath/to/Perlに変更します。多くの場合、Perlpythonなどのコマンドは実際には環境ベースのものであり、PATHにあります。 cronにはそのPATHがないため、crontabで絶対パスを使用するのが最善です。

1
user323419

Cronジョブとしてではなくシェルから実行されたときにスクリプトが実行される理由は、通常、そこにある異なるenvです。

Cronjobを変更して、envを保存します。/tmp/envを使用して

env | sort> /tmp/env

/ tmp/envが到着すると、現在のenvとdiffします。

env | sort | diff - /tmp/env

HTH

0
Georg Mavridis