- PR -

バックアップについて

投稿者投稿内容
これから
会議室デビュー日: 2004/12/17
投稿数: 3
投稿日時: 2004-12-17 01:54
初めての投稿になります。宜しくお願い致します。

今回は、各ログを毎日、バックアップを取りたく且つバックアップしたファイルは
バックアップフォルダなる物を作成して毎日そのフォルダに各ログを格納し、
システム日付を診みて一ヶ月ったたら削除をしたいと思っております。OSはRedHat9
です。そこで上記内容をシェルスクリプト(Bシェル)で行えたらと思っているのですが
、どうにもこうにもスクリプトがさっぱりわかりません。だれかご教授願いない
でしょうか。どうぞ宜しくお願い致します。
komey
ベテラン
会議室デビュー日: 2003/11/27
投稿数: 76
投稿日時: 2004-12-17 11:28
まずは何がわからないのかを明確にしましょう。
それによって回答が全く違ってくるので。。。

・シェルスクリプトが何なのかわからないのでしょうか?
・使うべきコマンドがわからないのでしょうか?
・動的な値を算出する方法がわからないのでしょうか?
・自動実行させる方法がわからないのでしょうか?

何がわからないのかはこれからさんにしかわからないので、ここは明確にしてください。
あと、少しでもあがいてみたのなら作ってみたシェルスクリプトを載せてください。

なお、答えを載せることは手っ取り早いのですが、それだと次に繋がりませんから、がんばって自分の力で作ってください。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2004-12-17 13:32
chmod 755 korekara
コード:
#!/bin/sh


while :
do
ls --full-time | awk '{ if(NR != 1) print $6, $7, $9 }' | sed 's/\.[0-9]* / /g' | sed 's/ /,/g' > tmp

for i in `cat < tmp`
do
yr=`echo $i | awk 'BEGIN {FS=","} {print }' | sed 's/\-/ /g'`
sprit=`echo $i | sed 's/,/ /g' | sed 's/:/ /g'`
args=`echo -n "$yr "; echo $sprit | awk '{ print $2, $3, $4, $5, $6, $7 }'`

./scr $args
done

sleep 1
done




chmod 755 scr
コード:
#!/bin/sh


stamp=`date | sed 's/年//' | sed 's/月//' | sed 's/日//'`
year=`echo $stamp | awk '{ print $1 }'`
mon=`echo $stamp | awk '{ print $2 }'`
day=`echo $stamp | awk '{ print $3 }'`

if [ `expr $year - 1` -eq `expr $1 + 0` ]; then
if [ `expr $mon + 0` -eq `expr 1 + 0` ] && [ `expr $2 + 0` -eq `expr 12 + 0` ]; then
if [ `expr $day + 0` -ge `expr $3 + 0` ]; then
/bin/rm -f $7
fi
else
/bin/rm -f $7
fi
else
if [ `expr $year + 0` -ge `expr $1 + 0` ]; then
if [ `expr $mon - 1` -gt `expr $2 + 0` ]; then
/bin/rm -f $7
fi

if [ `expr $mon - 1` -eq `expr $2 + 0` ]; then
if [ `expr $day + 0` -ge `expr $3 + 0` ]; then
/bin/rm -f $7
fi
fi
fi
fi



後は、自分でカスタマイズ。。。。おえっ!! @ITのregexp した時のPHP変数(?)
$[0..9] と このシェルとして書いた引数の "$7" が、何かの原因でバッティングかえっ!!

前から薄々気付いとったけど、シェル変数の "$[0..9]"、コードとして書いたら投稿時に
消えてまいよんのぅ。

上のコードにある $は、 半角特殊のASCII $ に変更な>これから
もう、シチ面倒臭いのぅホンマ。。。

[ メッセージ編集済み 編集者: コブラ 編集日時 2004-12-17 14:50 ]
これから
会議室デビュー日: 2004/12/17
投稿数: 3
投稿日時: 2004-12-19 16:59
komeyさん、コブラさんご連絡が遅くなり大変申し訳ありません。
komeyさんご回答ありがとうございます。
komeyさんが書いて下さった内容の内
「・自動実行させる方法がわからないのでしょうか?」以外がわかりません。
宜しくお願い致します。

コブラさんご回答ありがとうございます。
下記にスクリプトを書いて頂いているのですが
本当にすいません。何がなんだか良くわからず

「後は、自分でカスタマイズ。。。。」でかかれている
コブラさんの内容に対してどうしたらいいかわかりません
できれば、例などを教えて頂ければと思います
本当にお手数おかけしますが宜しくお願い致します
ちいにぃ
大ベテラン
会議室デビュー日: 2002/05/28
投稿数: 244
投稿日時: 2004-12-19 21:57
要求をすべて満たせるかどうか判りませんが、
独自にシェルスクリプト(やawkやperlやpythonのスクリプト)を書くかわりに、
既存の logrotate (概要は rpm -qi logrotate で確認のこと)を
使うのはダメなのでしょうか?
/etc/logrotate.d/ そこに独自に設定ファイルを用意すれば、任意の設定を追加できます。

Red Hat Linux 9 だとマニュアルでほんのちょっとだけ触れられています。
http://mirrors.kernel.org/redhat/redhat/linux/9/en/doc/RH-DOCS/rhl-cg-ja-9/ch-logfiles.html

使い方は man logrotateサーチエンジンで調べられます。
あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2004-12-19 22:03
毎日、クーロンで

-------------------------------------------------------------
#!/bin/sh

rm `find <directory> -mtime +31`

exit $?
-------------------------------------------------------------

を実行すれば 31 日以上更新されなかったファイルは削除されます。

あまり時間的に正確ではなく、しかもサブディレクトリのファイルも逝っちゃいますけど。。。
これから
会議室デビュー日: 2004/12/17
投稿数: 3
投稿日時: 2004-12-19 23:25
ちいにぃさん、あんとれさんご返事ありがとうございます。

ちいにぃさん
ありがとうございます
自分もそう思ったのですがローテートだと一ヶ月ローテートさせたとしてもその月により30日と31日の違いがありできないような気がします。
ローテートだと、ローテートで管理していないものについて無理な様な気がします。(oracleなど)

あんとれさん
ありがとうございます。
さっそく実行して見たいと思います。

理想は例えば、/var/log配下のmessagesを1日分の内容だけ違うフォルダの中
に違うファイルに作成して(messages.2004_12_19.logのようにその日の日付を
つけたい。)それを毎日をこない、行っできたファイルはその月の一ヶ月分し
かそのフォルダに残して次の月になったらその中にあるフォルダを全部
削除する、という感じにしたいのです。できましたら方等をお教えいただ
けないでしょうか?
宜しくお願い致します
pascal
常連さん
会議室デビュー日: 2004/04/29
投稿数: 29
お住まい・勤務地: 神奈川県
投稿日時: 2004-12-20 01:26
これからさん
コブラさんのサンプルスクリプト等を見てもピンと来ていないところを見ると、
もしかして、Bシェルの文法とか、OSコマンドが分からない、ってことですか?
要件をご自分で書けているのですから、私からすると、後はそのように書いてしまえば良い様に思います。サンプルスクリプトもあることですし。。

他の方もそうだと思いますが、答えてあげたいのに、あなたが本当に分からないことはなにか、が分からないので、答えようが無い、というのが現状のような気がします。

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