CRONTABジョブを実行して、フォルダから5日以上経過したファイルを削除したいと思います。エラーを防ぐために、コマンド出力をファイルに転送します。。
コマンドラインから実行すると、このコマンドはファイルを削除します。
/usr/bin/find /mnt/SQL_Backups/* -mtime +5 -exec rm {} \;
しかし、stdoutパイプとstderrパイプを取得するために追加すると失敗します。
/usr/bin/find /mnt/SQL_Backups/* -mtime +5 -exec rm {} \; > /mnt/output/CRONDeleteFiles.txt 2>$1
コマンドラインでエラーは次のとおりです。
-bash: $1: あいまいなリダイレクト
CRONTAB Eメールエラーメッセージでこのエラーが発生します。
/bin/sh: 1: 生成できません: ディレクトリが存在しません。
これが私のパイプラインコードに関連していると思われますか?
これを行う正しい方法は何ですか?
答え1
stderrはあなたの例とは2>&1
異なり、stdoutにリダイレクトされます。2>$1
答え2
ロガーに書くことができます。
find /mnt/SQL_Backups/* -mtime +5 -print -delete 2>&1 | logger -t rmsqlbackups
私のシステムには優先順位や機能(たとえば)がないため、システムに-p user.info
書き込まれます/var/log/messages
。2>&1
キャプチャ標準エラーまた標準出力。
>>
または、独自の方法でファイルに書き込みます。ただし、出力()の代わりに追加()が必要になる場合がありますが、>
ここではすべての出力の前に現在の日付/時刻を追加して次のことを確認できます。
( date; find /mnt/SQL_Backups/* -mtime +5 -print -delete; echo ) >> /mnt/output/CRONDeleteFiles.txt 2>&1