私はサーバー上で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 date
man 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