
Ubuntu日本語フォーラム

ログインしていません。
crontabによりSubversionのリポジトリのバックアップを行っています。
・Ubuntu7.10 デスクトップ版
・Subversion 1.3.2
シェルを作成し、シェルをコマンドラインから実行した時は正常にバックアップ
ファイルが作成されます。
(リストアを行い確認)
/home/abc/backup00.sh
--シェル(backup00.sh)の内容--------------------------------------------------------
#!/bin/bash
/usr/local/bin/svnadmin dump /var/svn/svn_src > /home/abc/svn_src.dmp
----------------------------------------------------------------------------------------
ところが、上記シェルをcrontabに登録して実行すると、バックアップファイルが
中途半端な状況になってしまいます。
最新のrevisionまで入らず、途中のrevisionまでのバックアップファイルが作成
されてしまいます。
---crontabの内容-------------------------------------------
00 15 * * * /home/abc/backup00.sh
----------------------------------------------------------
また、コマンドの最後に、【2>&1】を追加して、crontabを実行してみました。
/usr/local/bin/svnadmin dump /var/svn/svn_src > /home/abc/svn_src.dmp 2>&1
うまくいったと思ったのですが、シェルをコマンドラインから実行した時よりもsvn_src.dmpの
サイズが大きくなってしまい、リストアに失敗してしまいます。
svnadmin load svntest < /home/abc/svn_src.dmp
svnadmin: Found malformed header block in dumpfile stream
恐らく、crontabの設定に何かが不足していると思われます。
crontabを利用するための設定情報をお持ちの方がいらっしゃいましたら、
ご教授いただけませんでしょうか。
オフライン
※ここは初心者サポートですが、質問者の方はかなり端末操作に慣れていると思われるので、それに合わせた内容になっています。
shukurimu による投稿:
また、コマンドの最後に、【2>&1】を追加して、crontabを実行してみました。
/usr/local/bin/svnadmin dump /var/svn/svn_src > /home/abc/svn_src.dmp 2>&1
結論から言うと、上記のリダイレクションは間違ってますよ。
# たぶん、標準エラー出力を標準出力にリダイレクトされたかったのだと想像します。
command >file 2>&1
ってやると、標準出力と標準エラー出力の両方がfileに書き込まれます。
svnadmin dumpのケースでいうと、通常はダンプ内容は標準出力に出力され、フィードバックは標準エラー出力に出力されるので、上記のようなリダイレクションを行うと、2つの情報が1つのファイルに書き込まれます。(ファイルをcatしてみると分かりますよ)
そのファイルをsvnadmin loadすると
shukurimu による投稿:
svnadmin: Found malformed header block in dumpfile stream
というエラーになります。
詳細はsvnadmin help dumpを参照。
# リダイレクションは私も半年くらい前までよく間違えてましたが、あるブログ記事の素晴らしい説明に出会ってすっきりと理解することができました。
# 「Landscape リダイレクト 誤解」 または「シェルのファイルディスクリプタ操作」でWeb検索してみてくださいね。
shukurimu による投稿:
上記シェルをcrontabに登録して実行すると、バックアップファイルが
中途半端な状況になってしまいます。
最新のrevisionまで入らず、途中のrevisionまでのバックアップファイルが作成
されてしまいます。
よく分からないので問いかけという形で返答しますね。
アバウトな予想なんですが、
LANGの関係で日本語を処理する際に、途中で止まるのではないでしょうか。
cronは何もしなければLANG=Cでしたっけ?(あやふや)
日本語が一切入らないsubversionリポジトリを作ってテストしても結果は同じでしょうか?
crontabかシェルスクリプトのどこかでLANGを日本語にセットするとどうなりますか?
/usr/local/bin/svnadminってことは、subversionはソースビルドでしょうか?
一時的にUbuntuのリポジトリのsubversionで試しても同じでしょうか?
最後の編集者: STGSAGWAN (2008-11-26 00:12:38)
早速のご回答、及び情報のご提供ありがとうございます。
シェルの内容は変えずに、crontabを以下のようにしたら、うまくいきました。
---crontabの内容-----------------------------------------------------------------------------------------------
00 15 * * * /home/abc/backup00.sh 1>> /var/log/backup00_1.log 2>> /var/log/backup00_2.log
------------------------------------------------------------------------------------------------------------------
以上です。
オフライン