1

cron スケジュールを介して毎晩実行される 2 つのシェル スクリプトを記述します。

私の本番サーバーでは:

  1. mysqldump -ufoo -pbar --opt --routines db > ~/sqldump/{$todays_date}.sql
  2. ln -s ~/sqldump/{$todays_date}.sql latest.sql

私の開発サーバーでは:

  1. scp foo@domain.tld:~/sqldump/latest.sql ~/sqldump
  2. mysql -ufoo -pbar db < latest.sql

2 つの質問があります。

  1. 本番サーバーのジョブで、日付を入力するにはどうすればよい$todays_dateですか? 例: 「2010-07-21」
  2. 各ジョブでステップ 1 が完了するまでステップ 2 を待機させるにはどうすればよいですか?
4

2 に答える 2

3

今日の日付を取得するには、次を使用しますdate +%F

command > ~/sqldump/$(date +%F).sql

日付の書式設定で使用できるさまざまなオプションの詳細については+、日付のマニュアル ページを参照してください。

待機に関しては、本番サーバーでのコマンドが完了するまで、開発サーバーでコマンドを実行したくないという意味だと思います。最良のアイデアは、開発サーバーに ssh (つまりssh user@host "mysqldump ... > ... && ln -s ...) を使用してコマンドを開始させることです。

それをしたくない場合は、ダンプファイルの作成がアトミックになるように一時ファイルを使用することを考えることができます。

mysqldump ... > ~/sqldump/tmp$$ && mv ~/sqldump/tmp$$ ~/sqldump/$(date +%F).sql

次に、開発サーバー要求が今日の日付からのダンプを持っている場合は、scp が成功するまでループできます。

while ! scp foo@domain.tld:~/sqldump/$(date +%F).sql ~/sqldump; do
    # file not present yet, sleep 1 minute and try again
    sleep 60
done
mysql -ufoo -pbar db < latest.sql
于 2010-07-21T19:14:59.723 に答える
2

ステップ 1 のコマンドの最後に「&」を使用しない限り、ステップ 2 は自動的に待機します。

于 2010-07-21T19:17:23.983 に答える