重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Solaris9で/var配下を定期的にバックアップしたいと考え、
cronにて以下のようなコマンドを含むスクリプトを実行しています。

/usr/bin/tar cEfiX /backup/var_backup_`date '+%w'`.tar ${EXFILE} -C / ./var

しかし、/var配下に常時書き込みされているログファイルがあり、
tarがreturncode=1で終了してしまいます。
その際のエラー出力は以下で、
tar: ./var/hogehoge.log: file changed size
tarファイルに加える前と後で./var/hogehoge.logのファイルサイズが違っている
という内容だと認識しています。
※このファイルはバックアップの必要があるファイルでexcludeリストに加えるわけにもいきません。

tarコマンドの後に
if [ $? != 0 ]
という条件式を置いてエラーを検知しています。

何とかこのエラーだけを無視する妙案はありませんでしょうか?

A 回答 (3件)

こんにちは。



ちょっと筋違いになってしまいますが・・

/var配下をいったん別のエリアにCOPYするとかじゃだめでしょうか。
あるいは、エラーになるファイルが特定されているのでしたらそのファイルだけCOPYして、
COPYしたファイルをtarの対象にするとか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
実際にファイルのバックアップは取れていて、ReturnCodeでエラーになるため、ReturnCodeを何とかすることばかり考えていました。
確かにtarの前にコピーしてコピー元はexcludeに入れておけばバックアップも取れてReturnCodeも0になりそうですね。
ちなみにcpはtarのようにコピー前と後でそれぞれファイル比較とかしませんよね?
試している限りはエラーにはなっていませんが・・・

お礼日時:2005/03/14 19:09

全く別なアプローチですが Solaris9 では Volume Manager( 旧名Disk Suite )がパッケージされているので、RAID 1(ミラー)を構成しコピーが必要になった時にミラーを切り離してアクセスがない静的なファイルをコピーするという方法もあります。

 コピー終了後は、切り離したミラーを接続すると自動的にオフラインの間の差分は展開されるのでユーザーの負担はありません。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
悪い意味ではなく面白い発想ですね。
ただ、残念ながらディスクは2本構成で
すでにSVMのRAID1でまるまるで使ってしまっているため
この方法は使えそうにありません。

お礼日時:2005/03/16 23:15

#全く見当違いな回答でしたら済みません。

スルーしてください。

プロセスがずっと捕まえているファイルをバックアップする時は、
私は newsyslog(Linuxではlogrotate) を使っています。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
残念ながら「プロセスが掴んでいる」わけではなく、
「細かいデータが頻繁に書き込まれている」という感じです。

ちなみに、newsyslogでバックアップというのがピンとこないのですが、どのようなことをされているのでしょうか?話が脱線してしまいますがよろしければ教えてください。

お礼日時:2005/03/14 17:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!