- PR -

バックアップの日付別管理

1
投稿者投稿内容
Penguin
常連さん
会議室デビュー日: 2006/06/29
投稿数: 34
投稿日時: 2006-10-16 16:12
Linux上で、サーバのバックアップをしています。
バックアップ対象はファイル実体とデータベータクラスタです。シェルスクリプトを実行し、決めたディレクトリにバックアップを取ることはできました。次にそれらのデータを、日付ごとにディレクトリを用意し、日付ごとのバックアップを取っていきたいのですが、まずファイル名をその日の日付けにする時点でつまずいています。

pg_dumpall > /tmp/backup/backup.'date +%Y%m%d' で 'date +%Y%m%d' の部分が20061016 のようになるはずですよね、でもそのまま 'date +%Y%m%d' の形で保存されるのはなぜでしょうか・・?

 また、シェルスクリプトの中で自動的に今日のディレクトリを作成しその中に今日の分のバックアップを取りたい場合、 やはり for文で変数や引数を使うことになるのでしょうか。?

 よろしくお願い致します。


 
せっきー
会議室デビュー日: 2006/10/16
投稿数: 3
お住まい・勤務地: 神田
投稿日時: 2006-10-16 16:46
『'』(シングルクォート)ではダメなので『`』(逆クォート)にすればOKでしょう。
try
常連さん
会議室デビュー日: 2004/10/22
投稿数: 38
お住まい・勤務地: 神奈川/東京
投稿日時: 2006-10-16 16:53
引用:

pg_dumpall > /tmp/backup/backup.'date +%Y%m%d' で 'date +%Y%m%d' の部分が20061016 のようになるはずですよね、でもそのまま 'date +%Y%m%d' の形で保存されるのはなぜでしょうか・・?



そのコマンドの結果、「backup.date +%Y%m%d」と言う名前のファイルが正しい動作かと思います。
ファイル名に日付を入れるのであれば、
 pg_dumpall > /tmp/backup/backup.`date +%Y%m%d`
となるかと思います。

「" "」「' '」「` `」の3種類あるので使用する状況に分けて使う必要があります。


引用:

 また、シェルスクリプトの中で自動的に今日のディレクトリを作成しその中に今日の分のバックアップを取りたい場合、 やはり for文で変数や引数を使うことになるのでしょうか。?



その”今日”という日に1回しかバックアップを取らないのであれば、
mkdirをだらだらと書いても良いですし、
複数回であれば
 ・if文でディレクトリがあるか判断して、何もしない or 作成するの動作をさせる。
 ・エラーが出ようとも/dev/nullに捨てて強行する。
などあるかと思います。
Penguin
常連さん
会議室デビュー日: 2006/06/29
投稿数: 34
投稿日時: 2006-10-16 17:23
せっきーさん tryさん
なるほど、逆クオートが正しいのですね。ありがとうございます!!


引用-----------------------------------------------------------

その”今日”という日に1回しかバックアップを取らないのであれば、
mkdirをだらだらと書いても良いですし、
複数回であれば
 ・if文でディレクトリがあるか判断して、何もしない or 作成するの動作をさせる。
 ・エラーが出ようとも/dev/nullに捨てて強行する。
などあるかと思います。
---------------------------------------------------------------

エラーに関しては後でログ管理の設定をし、またcronで自動化する予定です。今の段階では、 mkdir または if文で試してみたいと思います。
Penguin
常連さん
会議室デビュー日: 2006/06/29
投稿数: 34
投稿日時: 2006-10-16 18:34
シェルスクリプトの中で mkdirをしシェルスクリプトを実行したところ、それはできません、そのディレクトリは不明です というようなエラーが出たのですが、シェルスクリプトの書き方が悪いのでしょうか。

cd /tmp/backup        #ディレクトリを作る場所に移り、
mkdir backup.`date +%Y%m%d` #mkdirを実行、そこをバックアップ先にしたのですが。

ここで変数や引数が必要になってくるのでしょうか。?
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2006-10-16 18:50
内容については他の方にお任せしますが(汗
引用:

ぽんたさんの書き込み (2006-10-16 18:34) より:
それはできません、そのディレクトリは不明です というようなエラーが出たのですが、


エラーを書くときは、基本的に「そのまま」を書くといいです。意訳すると原文を推測する作業が発生します。

(追記)
まさかとは思いますが「cd /tmp/backup」は実行できているんですよね?

[ メッセージ編集済み 編集者: shimix 編集日時 2006-10-16 18:53 ]
99ri
大ベテラン
会議室デビュー日: 2006/09/09
投稿数: 129
投稿日時: 2006-10-16 18:58
eval を使ってみてください(未検証です)

書き方がわるいからエラーになります
この程度ならコマンドを自分で入力して事前にエラーになることが確認できます

FedoraCore3で確認しました bash
eval は不要でした
mkdirのコマンドのみ実行すると 文字列.日付 でディレクトリが作成されましたよ





[ メッセージ編集済み 編集者: 99ri 編集日時 2006-10-16 21:42 ]
Penguin
常連さん
会議室デビュー日: 2006/06/29
投稿数: 34
投稿日時: 2006-10-17 15:10

いろいろ自分で試していて、できました! ごめんなさい、投稿の中ではmkdirができないと書きましたが、よくみたら意味が違いました・・

-------------------------------------------------------------------
bash: line 1: /tmp/backup/DATE.20061017/dump.20061017: 許可がありません
--------------------------------------------------------------------
というメッセージから、シェルスクリプトの中でpostgresユーザに su していたため、新しく作ったディレクトリへのアクセス権がpostgresユーザになく、このようなエラーになったのだと推測しました。下記のようにシェルスクリプトを書き加えたらできました。
------------------------------------------------------------------
cd /tmp/backup
mkdir Day`date +%Y%m%d`
ls
chmod 777 Day`date +%Y%m%d`

以下省略

------------------------------------------------------------------
※chmod をするためには、ls も入れないと、エラーがでることも分かりました。

今後も投稿は続くと思いますので、今後ともよろしくお願い致します!☆
1

スキルアップ/キャリアアップ(JOB@IT)