6

実行しようとするたびにエラーが発生するようにcrontabを設定しています。シェルで問題なく動作します。これは、データベース バックアップのファイル名に日付を自動的に挿入しようとするときに使用している形式です。ファイル名に日付を挿入できるようにcronを取得するために使用する必要がある構文を知っている人はいますか?

mysqldump -hServer -uUser -pPassword Table | gzip > 
/home/directory/backups/table.$(date +"%Y-%m-%d").gz

前もって感謝します!

4

2 に答える 2

18

crontab の「コマンド」部分については、次のようになります。

mysqldump --host=HOST --user=USER --password=PASSWORD DATABASE TABLE | gzip > /tmp/table.`date +"\%Y-\%m-\%d"`.gz

OP から変更されたのは、日付形式のエスケープです。

date +"\%Y-\%m-\%d"

(そして、バックティックを使用しましたが、それは大きな違いをもたらすはずです)

(他の解決策は、元のコマンドをシェルスクリプトに入れ、コマンドの代わりにcrontabからこれを実行することです-おそらく読み書きが簡単になるでしょう^^)

于 2009-07-20T19:20:11.243 に答える
0

「シェルでは機能するが、cron では機能しない」の最も一般的な理由は、実行しようとするコマンドが PATH にないことです。理由は、cron から呼び出されたシェルがログイン シェルと同じファイルをロードしないためです。

修正: 実行しようとする各コマンドに絶対パスを追加します。

あなたのコマンドで私が気付く2番目のこと。date コマンドを実行するための構文は、あまり移植性がないように見えます。それをバッククォートに変更するか、コマンド全体を shellscript に実行して (また、それを使用してパスを設定することもできます)、そのスクリプトを cron から実行します。

編集:

私の元の返信を書いている間、私のキーボードレイアウトにはバックティックがなかったので、パスカルが書いたものを確認してください。

そして、シェルスクリプトでできることの例:

以下を /usr/local/bin/dumptable.sh にコピーします

#!/bin/sh
/usr/bin/mysqldump --host=HOST --user=USER --password=PASSWORD DATABASE TABLE | /bin/gzip > /tmp/table.`/bin/date +"\%Y-\%m-\%d"`.gz

次に、/usr/local/bin/dumptable.sh を cron に入れます。

于 2009-07-20T19:14:35.017 に答える