タグ

flockに関するakaneharaのブックマーク (4)

  • シェルスクリプトで安全簡単な二重起動防止・排他/共有ロックの徹底解説 - Qiita

    はじめに シェルスクリプトで二重起動防止やロックをする方法を検索すると、いろいろな方法や書き方が見つかりますが、どれを使えばよいのか、当に正しく動くのか、不安になりますよね? ディレクトリ (mkdir) やシンボリックリンク (ln) を使った独自実装の例も見かけますが、エラー発生時や予期せぬ電源断、CTRL+C で止めたときなどでも問題は発生しないのでしょうか? まず、ディレクトリやシンボリックリンクを使った独自実装はしない。これを肝に銘じてください。シェルスクリプトでのロック管理はとても難しく、一般的な排他制御の知識に加えて、シェルスクリプト特有の問題、シグナルやトラップ、サブシェルや子プロセスの問題、さらには特定のシェル固有の仕様やバグなどさまざまな問題に対処する必要があり大変です。独自実装の例では古いロックファイルが残ってしまい、それをいつどのタイミングで片付ければ安全なのか?

    シェルスクリプトで安全簡単な二重起動防止・排他/共有ロックの徹底解説 - Qiita
  • flockコマンドをflock関数みたいに使う - 揮発性のメモ2

    flock(1)をflock(2)みたいに使いたい Stray Penguin - Linux Memo (BASH) ここに書いてあるとおりに実施する 関数定義 # ロック (ロックファイル名) filelock () { exec 9>>$1 flock -x 9 } # アンロック fileunlock () { exec 9>&- } 使い方 echo "HEAVEN OR HELL" filelock /tmp/hoge echo "LET'S LOCK" sleep 10 echo "SLASH" fileunlock exec 9>>$1 http://chaichan.web.infoseek.co.jp/src/BSH.htm#B13 を読む execによるリダイレクトで番号を自動で割り振る ファイルディスクリプタ 9番 を、引数(/tmp/hoge)への追記としてオー

    flockコマンドをflock関数みたいに使う - 揮発性のメモ2
  • シェルスクリプト多重起動の防止(flock(2) を用い、極力可搬に) - Qiita

    シェルスクリプトにおけるアドバイザリロックの実現方法にはいくつかありますが、ロックファイルの有無では、ファイルの消し損ねがよく起きてしまいます。また、pgrep(1) を用いる方法もよく見られますが、同じパスを含むコマンドが実行中であることは多く(特に、エディタで同スクリプトを編集中である場合など)、これまた確実性に欠きます。 最終的にベストの方法は、flock(2) システムコールを使う方法のようです(レンタルサーバなどでは使えないこともあるようですが、まー、今どきならコンテナ環境とか安いですし…)。flock(1) コマンドが使える環境であれば、待ち・ノンブロックの選択、排他ロックの他に参照の共有ロックもできて便利ですが、当座は多重起動を防止したいだけですので、ノンブロックの排他ロックを用います(参考: 「~/bin - using flock to protect critical

    シェルスクリプト多重起動の防止(flock(2) を用い、極力可搬に) - Qiita
  • Perlの排他制御 (flock,open,symlink,mkdir,rename)

    ファイル操作の排他制御といえば、以下のものが代表的です。 flockとロックファイル(ディレクトリ)式に大きく分けられます。 ロックファイル(ディレクトリ)を使う open関数 symlink関数 mkdir関数 rename関数 古いロックファイル(ディレクトリ)の削除 シグナルトラップ flockを使う flock関数 読込モード 追加モード 上書き・読み書きモード エラー処理 まとめてロックする タイムアウト ■ロックファイル(ディレクトリ)を使う 基は単なる使用中の目印です。目印が無いときに入って、自分で目印を作り、操作が終わったときに消して出るだけですね。トイレみたい(^^) で、使用中なら何回かノックします。(せかすな〜) open関数 ファイルオープン関数でファイル作成。 1.ファイルが存在するか。 2.しなければ作成。 と2段階を要するので、その隙に他のプロセスが

  • 1