cron
デフォルトのシェルコマンドセットを実行するジョブを設定しようとしています。
最後の日に生成されたすべてのファイルを表示して別のフォルダにコピーし、ファイルのコピー操作の日時を1行ずつ説明するログを生成する必要があります。
これら2つのシェルコマンドは独立して実行されますがcron
。最初のコマンド(find
)を増やそうとすると、ジョブはcron
実行されず、エラーが発生します。手動で実行すると動作します。
find /dir/ -type f -mtime -1 -exec cp -v -a --parents "{}" /dir2/ \; >> /dir2/LogsCopiaDBs_$(date +%d-%m-%Y).txt
exec &> >(while read line; do echo "$(date +'%h %d %Hh%Mm%Ss') $line" >> /dir2/LogsCopiaDBs.txt; done;)
どんなアイデアがありますか?
答え1
この行は異なる順序でなければなりません。
exec &> >(while read line; do echo "$(date +'%h %d %Hh%Mm%Ss') $line" >> /dir2/LogsCopiaDBs.txt; done;)
find /dir/ -type f -mtime -1 -exec cp -v -a --parents "{}" /dir2/ \; >> /dir2/LogsCopiaDBs_$(date +%d-%m-%Y).txt
その行は指定されたコマンドにexec
置き換えられ、その行はコピー操作を実行し、出力をロギングコマンドに置き換えます。STDOUT
find
STDOUT
一度に2つのログファイルを埋めたいと思います。 1 つはコピーコマンドの出力で、もう 1 つは日付プレフィックスです。これを行うには、このtee
コマンドを使用できます。このtee
コマンドがないと、コマンド出力はfind/cp
別のログファイルにリダイレクトされ、exec
コマンドとしてキャプチャされません。このtee
コマンドで問題を解決しました。
exec &> >(while read line; do echo "$(date +'%h %d %Hh%Mm%Ss') $line" >> /tmp/LogsCopiaDBs.txt; done;)
find /tmp/ -type f -mtime -1 -exec echo cp -v -a --parents "{}" /tmp/ \; |tee -a /tmp/LogsCopiaDBs_$(date +%d-%m-%Y).txt