タグ

ロックに関するakaneharaのブックマーク (7)

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

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

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

    cakesは2022年8月31日に終了いたしました。 10年間の長きにわたり、ご愛読ありがとうございました。 2022年9月1日

    cakes(ケイクス)
  • ZooKeeper のレシピとソリューション

    このドキュメントでは、ZooKeeper を使って高度な機能を実装する方法を示します。これらの方法はいずれもクライアント側で実装するものなので、ZooKeeper 側では何ら特別なサポートは必要ありません。ZooKeeper コミュニティがこれらの方法をクライアントサイドライブラリに取り込んでくれたら、その利用も簡単になって、標準的な手法として使われる機会も増えるでしょう。 ZooKeeper で最も興味深いことの一つは、ZooKeeper が非同期の通知を使っているにもかかわらず、ユーザー側では ZooKeeper を使って、キューやロックといった同期一貫性プリミティブを構築できることです。このドキュメントを読むとわかるように、それが可能なのは、ZooKeeper が更新に対して全体的な順序を保証しており、この順序を公開するしくみを用意しているからです。 以下で示すさまざまなレシピでは、

  • シェルスクリプト多重起動の防止(flock(2) を用い、極力可搬に) - Qiita

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

    シェルスクリプト多重起動の防止(flock(2) を用い、極力可搬に) - Qiita
  • cronジョブの多重起動を MySQLの汎用ロック機能で回避する - ブログ - ワルブリックス株式会社

    MySQLのロック機能を使って楽に cronジョブの多重実行回避をしようという話 たかがロック、されどロック システムで非同期にキューの処理などを行う場合、cronを使って短い間隔でバッチジョブを起動してキューを処理するという方法がよく取られるが、キューの混み具合によってはバッチジョブにかかる時間が長くなってしまうため、前に実行されたジョブがまだ走っているかどうかチェックして、もし走っている場合は処理を実行せずにそのまま終了するといった制御が必要になる。 たまにこの制御をしていないバッチジョブが溜まりに溜まってシステムをハングさせているのを見かける。 適当な空のファイルを作成してこれを flockするとか、システムコールレベルでアトミックに作成できることになっているオブジェクト(シンボリックリンクなど)を駆使してロックの代わりにするとかといったテクニックが典型的に利用されるが、これらを真面

    cronジョブの多重起動を MySQLの汎用ロック機能で回避する - ブログ - ワルブリックス株式会社
  • ファイルロック - Plan9日記

    UNIXでは複数のプロセスが同時にファイルにアクセスできるが、自動的にはロックされないので、おそらく最後のプロセスが書き込んだ結果が結果的に残こることになる。これでは都合が悪いので(特に分散ファイルシステムや分散OSでは)、ファイルロックという仕組みが提供されている。UNIXではflockやlockf、fcntlが使われる。UNIXのファイルロックは基的にアドバイザリロック(advisory lock)と言って、プログラムがお行儀よく書かれていることが前提になっている。一方、カーネルによって強制的にファイルアクセスを排他制御する仕組みを強制ロック(mandatory lock)と呼ぶ。 Plan 9には強制ロックを実現する仕組みとしてファイルパーミッションを拡張している。exclusive (l)ビットがそれである。 % touch a % chmod +l a % ls -l a -l

    ファイルロック - Plan9日記
  • Perlの排他制御 (flock,open,symlink,mkdir,rename)

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

  • 1