私は使うツスネイパーmake コマンドは管理に使用されます。タスナップ次のバックアップ:
tarsnapper -c /usr/local/etc/tarsnapper.conf make
これはうまくいくはずです。このように出力されます。
Creating backup mail: mybackupjob-20150610-092951
3 backups are matching
0 of those can be deleted
これでcronでこれを実行します(cronはUbuntu 15.04の/ bin / shで実行されているようです)。
0 2 * * * PATH=$PATH:/usr/local/bin tarsnapper -c /usr/local/etc/tarsnapper.conf make >/dev/null
それ以外の場合はうまくいきますが、何らかの理由でcronを介して電子メールに出力(stdout)が表示され続けるため、stdoutを/ dev / nullにリダイレクトすることは望みどおりに機能しないようです。
リダイレクトを使用してcronなしでコマンドを実行してデバッグしようとしましたが、実行時に出力が表示されます。
tarsnapper -c /usr/local/etc/tarsnapper.conf make >/dev/null
では、このtarsnapper呼び出しの通常の出力(stdout)を/ dev / nullに正しくリダイレクトするにはどうすればよいですか?
他のコマンドにリダイレクトするときにこのような問題が発生したことがないため、>/dev/null
tarsnapperの仕組みに関連しているようです。そうですか?
私はtarsnapperがtarsnapバイナリを呼び出すPythonスクリプトであることを知っています。
標準出力リダイレクトに対する回答を見つけようとしましたが、問題を解決するエントリが見つかりませんでした。
答え1
いったん質問を投稿した直後(答えを見つけようと1、2時間ほど努力した後)、問題を発見しました。
tarsnapperは、標準出力をすべてstdoutの代わりにstderrに出力するようです。私はこれがtarsnapperのバグだと思います。
しかし、私自身の質問に答えるには、「通常の出力」を削除するためにリダイレクト(stderrをリダイレクトするため)を使用する必要があります2>/dev/null
が、実際のエラーがある可能性があるとしても出力を取得できません。 cronから電子メールを受信するなどのエラーが発生した場合でも、続行してください。
編集する:
一時的な「ソリューション」として、tarsnapper(stdoutとstderr)のすべての出力をリダイレクトし、それをcronのログファイルに追加しました。
0 2 * * * PATH=$PATH:/usr/local/bin tarsnapper -c /usr/local/etc/tarsnapper.conf make >>/var/log/tarsnapper-cron.log 2>&1
/var/log/tarsnapper-cron.log
したがって、私の電子メールをcronスパムに送信せずにtarsnapperがどのように機能するかを確認したいことを確認できます。
電子メールで発生する可能性のあるエラーも自動的に取得できる場合は明らかに良いでしょうが、現在tarsnapper自体を修正したり、tarsnapper出力を解析したり、エラーがあるかどうかを調べるスクリプトを作成しなくても不可能に見えます。出力テキスト。