cronスクリプトでシステムの日付/時刻を使用する

cronスクリプトでシステムの日付/時刻を使用する

私はサーバー上でMySQLデータベースをバックアップするためにCronjobを設定していますが、同じファイルを繰り返し上書きしたくありません。代わりに、選択できるさまざまなバックアップを自動的に実行したいと思います。たとえば、

## Cronjob, run May 21st, 2011:
mysqldump -u username -ppasword database > /path/to/file/21-03-2011.sql

## SAME Conjob, run May 28th, 2011:
mysqldump -u username -ppasword database > /path/to/file/28-03-2011.sql

など。

私のCronjobでシステムの日付と時刻を一種の変数として使用する方法はありますか?そうでなければ、同じ結果を得るためにどのような提案をするべきですか?

答え1

次のように試すことができます(下記のGlenn Jackmanが言ったように、すべての文字をエスケープする必要があります%)。

15 11 * * * touch "/tmp/$(date +\%d-\%m-\%Y).sql"

特定のcronがcrontabのスクリプトでコマンドを実行するか、日付を文字列として計算してからmysqldumpコマンドを実行するスクリプトを作成する必要があるかどうかを確認してください。

エスケープせずに%Redhat Enterprise Linux 5.0の「cron」は、(私の考えでは)一致するものが見つからないというエラーを表示し続けます)。これは、エスケープされていないすべての項目が%コマンドの標準入力に送信されるためです。

%Fまた、ファイル名を語彙順に並べ替えるときに日付で並べ替えるには、ISO8601日付形式(yyyy-mm-ddなど)を使用することをお勧めします。

答え2

を使用して詳細を入力またはインポートできる必要がありますdate
info dateman date

次の方法が役に立ちます(必要に応じて日付形式を変更してください)。

yourcommand > filepathandnameprefix$(date +"\%d-\%m-\%Y").extension

答え3

このようなコマンドを正しく実行するには、次の手順を実行する必要があります。脱出する%これは期待どおりに実行されます。

望むより:http://www.ducea.com/2008/11/12/using-the-character-in-crontab-entries/

答え4

dateこのコマンドを使用し、バックアップコマンドを呼び出す小さなラッパースクリプトを作成します。

#!/bin/bash
NOW=`/bin/date +"%m%d%Y-%H%M%S"`
if [[ "$?" != "0" ]]; then
 NOW="UNKNOWN_DATE"
 fi
mysqldump -u username -ppassword database > /path/to/file/$NOW.sql
if [[ "$?" != "0" ]]; then
 echo "$0: backup failed with error code $?"
 fi

関連情報