web-dev-qa-db-ja.com

(MTAがインストールされていません)のcrontabエラーですが、> / dev / null 2>&1を使用しています

私はLinuxユーザーの新人です

Crontabを実行して、データベースをvagrant userでバックアップしようとしています

* * * * * /usr/bin/mysqldump -h localhost -u root -p root mydb | gzip > /var/backup/all/database_`date +%Y-%m-%d`.sql.gz >/dev/null 2>&1

crontabを実行すると、フォルダーにバックアップファイルがありません(私のバックアップ/すべてに755のアクセス許可スキームがあります)。

これは/var/log/syslogからのエラーです

Aug 16 11:55:01 precise64 CRON[2213]: (vagrant) CMD (/usr/bin/mysqldump -h localhost -u root -p root mydb | gzip > /var/backup/all/database_`date +%Y-%m-%d`.sql.gz >/dev/null 2>&1)
Aug 16 11:55:01 precise64 CRON[2212]: (CRON) info (No MTA installed, discarding output)

だから私は思う

  1. 権限が拒否されたため、crontabがバックアップファイルを作成できません。
  2. それは私がMTAをインストールしなかったということですが、>/dev/null 2>&1を使用してcrontabを無効にし、エラーの理由をメールで送信します。

もちろん、エラーは、メーラー(sendmail、postfixなど)が実装されてアクティブになっていないことです。

>/dev/null 2>&1は、この場合はgzipのLASTコマンドにのみ適用/関連付けされるということです。したがって、mysqldumpのSTDERRに送信される何らかのタイプの出力が必要です。

あなたが望むと思うことをする正しい方法は次のとおりです:

 * * * * *  (command | command ) >/dev/null 2>&1
11
mdpc

あなたは置くことができます:

MAILTO=""

crontabファイルの先頭に追加すると、メールを送信できなくなります。

5

crontabコマンドを実行しているユーザーがvagrantで、出力が書き込まれるディレクトリがrootによって所有されており、権限755を持っている場合、書かれていません。
Sudo chown vagrant /var/backup/all
それを修正するかもしれません。

それが問題であるかどうかを確認するには、代わりに/tmpのファイルに書き込んでみてください。

しかし、別の問題があります:次のようなコマンド
mysqldump mydb | gzip > database.sql.gz >/dev/null 2>&1
はデータベースダンプをdatabase.sql.gzおよび/dev/nullに書き込みます。
2>&1は、エラーメッセージを標準出力にコピーします。つまり、エラーメッセージをdatabase.sql.gzにも書き込みます。圧縮されたデータ間のどこかにエラーメッセージテキストを書き込むため、圧縮ファイルは壊れます。問題が標準エラーストリームに書き込まれたときにのみ問題が発生するため、テスト時にうまく機能する場合があります。 stderrへの出力は単なる警告の場合がありますが、他のすべては機能します。

圧縮データベースダンプをsql.gzファイルに書き込み、エラーを/dev/nullに書き込むつもりだと思います。このためには、エラーストリームを出力ストリームにコピーしないことにより、出力ストリームを分離してください。そして、それらを次のようなファイルに向けます:

mysqldump mydb | gzip > /var/backup/all/database_`date +%Y-%m-%d`.sql.gz 2>/dev/null

エラーメッセージ「(MTAがインストールされていません、出力を破棄しています)」は、エラー出力を送信できないことを示すcronです。いずれにしても、エラーを/dev/nullにリダイレクトするため、最終的には問題ありません。送信するものはありません。しかし、私は現在、送信するエラーメッセージがあるのではないかと疑っています。これにより、上記の結果が確認できます。

1
Volker Siegel