cronからファイルに出力をリダイレクトする方法は?

cronからファイルに出力をリダイレクトする方法は?

一日の特定の時間に実行する必要があるバックアップスクリプトがあるので、そのタスクを使用しており、croncronからバックアップスクリプトの出力をlogfile

crontab -e

*/1 * * * * /home/ranveer/backup.sh &>> /home/ranveer/backup.log

上記のcronエントリの両方がstderr and stdoutログファイルにリダイレクトされます。

上記のcronジョブは正常に実行され、syslog ファイルに記載されている操作を実行しますbackup.shが、ログファイルには何も書きません。

/var/log/syslog

Oct 19 20:26:01 ranveer CRON[15214]: (ranveer) CMD (/home/ranveer/backup.sh &>> /home/ranveer/backup.log)

cliでスクリプトを実行すると、必要に応じて動作し、出力をログファイルに書き込みます。

ranveer@ranveer:~$ ./backup.sh &>> backup.log 
ranveer@ranveer:~$ cat backup.log
Fri Oct 19 20:28:01 IST 2012
successfully copied testdir
test.txt successfully copied
-------------------------------------------------------------------------------------
ranveer@ranveer:~$ 

それでは、ファイル出力がcronからファイルにリダイレクトされないのはなぜですか?

答え1

この問題を解決しました。 2つの方法があります。

M1

リダイレクトをからに変更&>>します2>&1。これで、crontab -e次のようになります。

*/1 * * * * /home/ranveer/vimbackup.sh >> /home/ranveer/vimbackup.log 2>&1

私は信じる上記の方法は、デフォルトでは実行ジョブが代わりにcron使用されるためサポートされていないため機能します。shbash&>>sh

M2

SHELL=/bin/bashファイルを追加してデフォルトのシェルを変更しますcrontab -e

答え2

免責事項[1]。

脚注や付録を追加したい@RanRagからの返信

シェルリダイレクト構文がこれに準拠していることを確認してください/bin/sh。無効なシェルリダイレクト構文を使用しようとすると、/bin/shコマンドは失敗し、クローン操作は実行されません。

構成ファイルで/etc/cron.d/example1そうでないユーザーを指定し、rootそのユーザーのログインシェルが/bin/bash...でない場合でも、コマンドに/ bin / sh構文を使用する必要があります/etc/cron.d/example1


例えば

ユーザーにシェルcshまたはzshログインkshシェルセットがある場合。構成ファイルでは、/etc/cron.d/example1コマンドは構文を使用する必要があります/bin/sh。特に、すべてのシェルリダイレクトは/bin/sh構文的でなければなりません。

cshクローンジョブでシェルリダイレクト構文を使用しようとすると、クローンジョブは/etc/cron.d/example1実行されません。crond見つかったログファイルは/var/log/cronコマンドが実行されたことを示す必要がありますが、コマンドが実行される前にコマンドで構文エラーが発生します。

crond構文エラーエラーメッセージはどこに発行されますか?

このバグはで報告されていません/var/log/croncrond代わりに、デフォルトではすべてのエラーメッセージが表示されますmail。したがって、/var/spool/mail/${USER}正確に何がエラーであるかを確認する必要があります。

[1]

婦人声明

  • この答えはsysvシステムを想定しています。
  • systemd情報は異なる場合があります
  • 特に、この情報はcentos-6ディストリビューションについて学習され、他のディストリビューsysvションには適用されない可能性があります。
    • ディストリビューションによって実装がcentos-6異なる可能性があるため、特に言及します。crondcentos-6

答え3

次の例に示すように、2 より大きい記号を使用して出力情報をログファイルに送信できます。

* * * * * /usr/bin/python /path/to/script.py >> /path/to/logfile/output.log

次のリンクで、この便利なcrontabラインジェネレータを確認してください。https://crontab-generator.org/

関連情報