パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

バックアップ実行中にスクリプト上書きしたらスパコンデータ消失」記事へのコメント

  • てっきり最初にスクリプト全部読み込んでから走らせてると思ってた。

    京大での事故で広く知られたように、シェルは最初にスクリプト全体を読み込むのではなく、「1行ずつ順次読み込む。そしてスクリプト終端に達したり exit や致命的エラーなどによりスクリプトは終了する。

    走らせているスクリプトを変更する機会は今までになかった。
    期待どおりに動いていないのがわかったらkillしてから書き換えてるし。
    それでも、本番で長時間走らせている時に不具合見つかったらやっちゃうのかな。

    スクリプトを改変するときはバックアップ後に別名コピーしてテストして問題がなければ元の名前に上書きしてた。
    小手先処理の簡単なスクリプトしか作らないので、バージョン管理とかその手のことはやってない現場仕事ですが。
    ループがあっても小さいものだし、それくらいなら最初に全部読み込まれそう。

    • by Anonymous Coward

      上書きじゃなくてmvしよう。

      • ファイルシステムをまたいでのmvて安全じゃないんすよ
        • by Anonymous Coward

          自明かと思って注意しなかった。
          renameシステムコールを使おう、ならあってる?

          あとはemacs使えとか。
          vimはどうかな?

          • こうレベルの話だと、「emacsやvimで本番環境のファイルを直接編集する」時点でアウトじゃないですかね。
            「あらかじめテスト環境で動作確認を取ってから、本番環境に上げる」ようにしないと。

            となると、ファイル更新に使うツールはscpとかrsyncとかだけど、
            自分がやるなら、「別ディレクトリにアップしておいてから、rename(mv)」かな。

            実行中書き換えの問題がなくても、
            「ファイルコピー中の、中途半端な状態のファイルで実行してしまう」リスクが怖いので、
            ファイルを用意してからatomicに切り替えるようにすべき。

            親コメント
            • by Anonymous Coward

              アトミックな置換は大賛成。
              だけど、実行中だとアトミックに置換しても逐次読みや別ファイル参照で整合性が失われるから、
              実行中の変更を安全に行うのは基本的には不可能だと思ったほうがいいのよな。

              Windowsのアップデートが再起動祭りな事に対して
              Linuxはアップデートでの再起動をあまり要求しないって誇る人たちが昔は目に付いたけど、
              逐次読み、別ファイル参照を考慮するとどっちもどっちっていうね。

皆さんもソースを読むときに、行と行の間を読むような気持ちで見てほしい -- あるハッカー

処理中...