アカウント名:
パスワード:
てっきり最初にスクリプト全部読み込んでから走らせてると思ってた。
京大での事故で広く知られたように、シェルは最初にスクリプト全体を読み込むのではなく、「1行ずつ順次読み込む。そしてスクリプト終端に達したり exit や致命的エラーなどによりスクリプトは終了する。
走らせているスクリプトを変更する機会は今までになかった。期待どおりに動いていないのがわかったらkillしてから書き換えてるし。それでも、本番で長時間走らせている時に不具合見つかったらやっちゃうのかな。
スクリプトを改変するときはバックアップ後に別名コピーしてテストして問題がなければ元の名前に上書きしてた。小手先処理の簡単なスクリプトしか作らないので、バージョン管理とかその手のことはやってない現場仕事ですが。ループがあっても小さいものだし、それくらいなら最初に全部読み込まれそう。
上書きじゃなくてmvしよう。
はい、仰せの通りに mv しています
スクリプト書き換えるときは同じdirectoryでやるからファイルシステムマタギは安全そう。
自明かと思って注意しなかった。renameシステムコールを使おう、ならあってる?
あとはemacs使えとか。vimはどうかな?
こうレベルの話だと、「emacsやvimで本番環境のファイルを直接編集する」時点でアウトじゃないですかね。「あらかじめテスト環境で動作確認を取ってから、本番環境に上げる」ようにしないと。
となると、ファイル更新に使うツールはscpとかrsyncとかだけど、自分がやるなら、「別ディレクトリにアップしておいてから、rename(mv)」かな。
実行中書き換えの問題がなくても、「ファイルコピー中の、中途半端な状態のファイルで実行してしまう」リスクが怖いので、ファイルを用意してからatomicに切り替えるようにすべき。
アトミックな置換は大賛成。だけど、実行中だとアトミックに置換しても逐次読みや別ファイル参照で整合性が失われるから、実行中の変更を安全に行うのは基本的には不可能だと思ったほうがいいのよな。
Windowsのアップデートが再起動祭りな事に対してLinuxはアップデートでの再起動をあまり要求しないって誇る人たちが昔は目に付いたけど、逐次読み、別ファイル参照を考慮するとどっちもどっちっていうね。
remove(unlink)じゃね?openして上書きするのが問題なんであって、消してコピーか、renameで内部的にunlinkすれば安全と。unlinkさえしてあれば再オープン出来ないから安全になる。さらにrenameならunlink含めてアトミックだからさらに安心ってことで。
処理系やバージョンによるので確かめてからやりましょうが正解では。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
アレゲはアレゲ以上のなにものでもなさげ -- アレゲ研究家
しらんかった (スコア:5, 参考になる)
てっきり最初にスクリプト全部読み込んでから走らせてると思ってた。
京大での事故で広く知られたように、シェルは最初にスクリプト全体を読み込むのではなく、「1行ずつ順次読み込む。そしてスクリプト終端に達したり exit や致命的エラーなどによりスクリプトは終了する。
走らせているスクリプトを変更する機会は今までになかった。
期待どおりに動いていないのがわかったらkillしてから書き換えてるし。
それでも、本番で長時間走らせている時に不具合見つかったらやっちゃうのかな。
スクリプトを改変するときはバックアップ後に別名コピーしてテストして問題がなければ元の名前に上書きしてた。
小手先処理の簡単なスクリプトしか作らないので、バージョン管理とかその手のことはやってない現場仕事ですが。
ループがあっても小さいものだし、それくらいなら最初に全部読み込まれそう。
Re:しらんかった (スコア:0)
上書きじゃなくてmvしよう。
Re:しらんかった (スコア:1)
はい、仰せの通りに mv しています
Re:しらんかった (スコア:1)
Re:しらんかった (スコア:1)
スクリプト書き換えるときは同じdirectoryでやるからファイルシステムマタギは安全そう。
Re: (スコア:0)
自明かと思って注意しなかった。
renameシステムコールを使おう、ならあってる?
あとはemacs使えとか。
vimはどうかな?
Re:しらんかった (スコア:1)
こうレベルの話だと、「emacsやvimで本番環境のファイルを直接編集する」時点でアウトじゃないですかね。
「あらかじめテスト環境で動作確認を取ってから、本番環境に上げる」ようにしないと。
となると、ファイル更新に使うツールはscpとかrsyncとかだけど、
自分がやるなら、「別ディレクトリにアップしておいてから、rename(mv)」かな。
実行中書き換えの問題がなくても、
「ファイルコピー中の、中途半端な状態のファイルで実行してしまう」リスクが怖いので、
ファイルを用意してからatomicに切り替えるようにすべき。
Re: (スコア:0)
アトミックな置換は大賛成。
だけど、実行中だとアトミックに置換しても逐次読みや別ファイル参照で整合性が失われるから、
実行中の変更を安全に行うのは基本的には不可能だと思ったほうがいいのよな。
Windowsのアップデートが再起動祭りな事に対して
Linuxはアップデートでの再起動をあまり要求しないって誇る人たちが昔は目に付いたけど、
逐次読み、別ファイル参照を考慮するとどっちもどっちっていうね。
Re: (スコア:0)
remove(unlink)じゃね?
openして上書きするのが問題なんであって、消してコピーか、renameで内部的にunlinkすれば安全と。
unlinkさえしてあれば再オープン出来ないから安全になる。
さらにrenameならunlink含めてアトミックだからさらに安心ってことで。
Re: (スコア:0)
処理系やバージョンによるので確かめてからやりましょうが正解では。