Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Bashスクリプトにおけるバッチ処理の同時実行制御について #ツナギメオフライン.4
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
akase244
January 21, 2026
Technology
150
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Bashスクリプトにおけるバッチ処理の同時実行制御について #ツナギメオフライン.4
ツナギメオフライン ベンキョウカイ #4で発表したスライドです。
akase244
January 21, 2026
More Decks by akase244
See All by akase244
Laravelのアプリケーションをどこにデプロイするか #ツナギメオフライン.9
akase244
0
130
mkpasswd を再実装したくなったので AIに伴走してもらいながら rekey という パスワードジェネレーターを作ってみた #fukuokago
akase244
0
51
Let’s Encryptのフォールバック先について #ツナギメオフライン.8
akase244
0
75
PHPでローカル環境用のSSL/TLS証明書を発行することはできるのか? #phpconkagawa
akase244
0
510
「Linuxサーバー構築標準教科書」を読んでみた #ツナギメオフライン.7
akase244
0
1.4k
connpassのMCPを作ってみた #ツナギメオフライン.6
akase244
0
83
ローカル環境でSSL/TLS証明書を発行して警告表示を出さないようにするアレコレ #ツナギメオフライン.5
akase244
0
110
GitHub Actionsを使って指定した日時にPull Requestをマージしたい #lydmeet
akase244
0
100
疎通・有効期限を確認するコマンド #ツナギメオフライン.3
akase244
0
110
Other Decks in Technology
See All in Technology
生成AIエージェントを用いた、 手動テスト手順書から自動テストへの 変換手法の検討
magicpod
0
160
Minecraft JavaのMODをSwiftで作る
1mash0
0
160
負債のメタファと2026年 / Debt Metaphor in Agentic Engineering Age 202609 Edition
twada
PRO
8
3k
事業課題から技術的負債に向き合う
sansantech
PRO
2
1.9k
Claude in Chrome 入門 / Introduction to Claude in Chrome
cielo1985
0
820
Railsのように考える: See through the Master
snoozer05
PRO
3
890
アプリログインとWeb認証基盤をつなぐ ASWebAuthenticationSession 作法
shimastripe
1
320
すぐできる衛星通信対応 あとは山奥に行くだけ
tatetate55
0
130
積み重なった技術負債への挑戦 〜初手としての全社ゴト化〜
techtekt
PRO
0
1.2k
10Xに技術的負債をもたらした「2つの境界の歪み」その構造と解消への営み
10xinc
0
2k
Issue 駆動でスペシャリストの意図を届ける、AI 実装のアクセシビリティ向上
thkt
0
110
AIネイティブプロダクトで顧客価値を最大化するプロダクトエンジニアとFDEの協働
righttouch
PRO
0
310
Featured
See All Featured
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
840
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
540
The Spectacular Lies of Maps
axbom
PRO
1
990
Product Roadmaps are Hard
iamctodd
55
13k
Writing Fast Ruby
sferik
630
63k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
480
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
65k
A Soul's Torment
seathinner
8
3.6k
Exploring anti-patterns in Rails
aemeredith
4
510
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
590
Transcript
Bashスクリプトにおける バッチ処理の同時実行制御について ツナギメオフライン ベンキョウカイ #4 January 21, 2026.
@akase244 <?php var_dump( (new Me()) ->WebApplicationEngineer() ->InfrastructureEngineer() ); January 21,
2026. ツナギメオフライン ベンキョウカイ #4
@tsunagimefm https://tsunagi.me/ January 21, 2026. ツナギメオフライン ベンキョウカイ #4
みなさんバッチ処理書いてますか? January 21, 2026. ツナギメオフライン ベンキョウカイ #4
そのバッチ処理は同時に動いても問題ないですか? January 21, 2026. ツナギメオフライン ベンキョウカイ #4
同時実行をあまり考えず こんな処理を書いてました January 21, 2026. ツナギメオフライン ベンキョウカイ #4
LOCKFILE=/tmp/mybatch.lock if [ ! -f "$LOCKFILE" ]; then touch "$LOCKFILE"
# 処理 fi trap 'rm -f "$LOCKFILE"' EXIT January 21, 2026. ツナギメオフライン ベンキョウカイ #4
パッと見は良さそう January 21, 2026. ツナギメオフライン ベンキョウカイ #4
何が問題か January 21, 2026. ツナギメオフライン ベンキョウカイ #4
色々と問題が January 21, 2026. ツナギメオフライン ベンキョウカイ #4
• 厳密には同時実行を防げない。 • 強制終了(「ctrl-c」、「kill -9」)した場合にロックファイルが残る。 • 処理実行中にサーバーが再起動した場合はロックファイルが残る。 • スクリプトに不具合があると途中で終了しロックファイルが残る。 •
ロックファイルが存在している場合に「処理中の状態」なのか「処理に失敗 して残っている状態」なのかを判別できない。 January 21, 2026. ツナギメオフライン ベンキョウカイ #4
• 厳密には同時実行を防げない。 • 強制終了(「ctrl-c」、「kill -9」)した場合にロックファイルが残る。 • 処理実行中にサーバーが再起動した場合はロックファイルが残る。 • スクリプトに不具合があると途中で終了しロックファイルが残る。 •
ロックファイルが存在している場合に「処理中の状態」なのか「処理に失敗 して残っている状態」なのかを判別できない。 January 21, 2026. ツナギメオフライン ベンキョウカイ #4
TOCTOU(Time-of-check to time-of-use) January 21, 2026. ツナギメオフライン ベンキョウカイ #4
January 21, 2026. ツナギメオフライン ベンキョウカイ #4 https://ja.wikipedia.org/wiki/Time-of-check_to_time-of-use
トックトゥー? January 21, 2026. ツナギメオフライン ベンキョウカイ #4
なんかちょっと発音するのが恥ずかしい January 21, 2026. ツナギメオフライン ベンキョウカイ #4
状態を確認した時点と実際にそれを利用する時点の 間に割り込まれる余地があるという問題 January 21, 2026. ツナギメオフライン ベンキョウカイ #4
LOCKFILE=/tmp/mybatch.lock if [ ! -f "$LOCKFILE" ]; then # 状態を確認した時点
# ここで別の処理に割り込まれる余地がある touch "$LOCKFILE" # 利用する時点 # 処理 fi trap 'rm -f "$LOCKFILE"' EXIT January 21, 2026. ツナギメオフライン ベンキョウカイ #4
ではどのように対応するか? January 21, 2026. ツナギメオフライン ベンキョウカイ #4
アプリケーションの仕組みで解決するのではなく カーネルの仕組みで解決する January 21, 2026. ツナギメオフライン ベンキョウカイ #4
LOCKFILE=/tmp/mybatch.lock exec 200>"$LOCKFILE" flock -n 200 # 以降、シェルが生きている限りロックを保持 January 21,
2026. ツナギメオフライン ベンキョウカイ #4
「exec 200>"$LOCKFILE"」??? January 21, 2026. ツナギメオフライン ベンキョウカイ #4
「command > /dev/null 2>&1」の 仲間だと思ってください January 21, 2026. ツナギメオフライン ベンキョウカイ
#4
• 「200」はファイルディスクリプタ番号。 • 数字は何でもよいが0〜2は予約されている。 ◦ 0: stdin(標準入力) ◦ 1: stdout(標準出力)
◦ 2: stderr(標準エラー出力) • 「3」以降であれば利用してよい。 January 21, 2026. ツナギメオフライン ベンキョウカイ #4
ファイルディスクリプタ番号の上限値は? January 21, 2026. ツナギメオフライン ベンキョウカイ #4
• ulimit • sysctl • fs.nr_open • /etc/security/limits.conf January 21,
2026. ツナギメオフライン ベンキョウカイ #4 あまり詳しくないのでこのあたりを キーワードにしてAIに聞いてください
「flock -n 200」??? January 21, 2026. ツナギメオフライン ベンキョウカイ #4
• Linuxカーネルのロック機構(排他制御)。 ◦ 「-n」はノンブロッキングを意味する。 ▪ ロックが取れなければすぐに処理を終了する。 ◦ プロセスが終了するとロックが解放されることが保証されている。 ▪ 正常終了(「exit
0」) ▪ 異常終了(「exit 0」以外) ▪ 強制終了(「ctrl-c」(SIGINT)、「kill -9」(SIGKILL)) ▪ 予期せぬ再起動・電源断 January 21, 2026. ツナギメオフライン ベンキョウカイ #4
crontabで排他制御を行いたい場合は? January 21, 2026. ツナギメオフライン ベンキョウカイ #4
# crontabの場合はこのように簡潔な書き方でOK * * * * * /usr/bin/flock -n lockfile
command January 21, 2026. ツナギメオフライン ベンキョウカイ #4
flockとか難しいんですけど? January 21, 2026. ツナギメオフライン ベンキョウカイ #4
LOCKDIR=/tmp/mybatch.lock if ! mkdir "$LOCKDIR" 2>/dev/null; then echo "すでに実行中" exit
1 fi ・ ・ trap 'rmdir "$LOCKDIR"' EXIT January 21, 2026. ツナギメオフライン ベンキョウカイ #4
mkdirはアトミックな処理 January 21, 2026. ツナギメオフライン ベンキョウカイ #4
• アトミックとは途中で割り込まれず成功か失敗かのどちらかしか起きない操 作。 • mkdirは後から実行した方が必ず失敗する。 • ただし、trapだけではロックディレクトリが残る可能性あり。 January 21, 2026.
ツナギメオフライン ベンキョウカイ #4
Bashスクリプトではなく プログラミング言語の場合は? January 21, 2026. ツナギメオフライン ベンキョウカイ #4
• PHP ◦ https://www.php.net/manual/ja/function.flock.php • Python ◦ https://docs.python.org/3/library/fcntl.html#fcntl.flock • Ruby
◦ https://docs.ruby-lang.org/ja/latest/method/File/i/flock.html • Java ◦ https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java /nio/channels/FileChannel.html#lock() • Go ◦ https://pkg.go.dev/syscall#Flock January 21, 2026. ツナギメオフライン ベンキョウカイ #4
まとめ January 21, 2026. ツナギメオフライン ベンキョウカイ #4
• 同実行制御はアプリケーション側で対応するのではなく、カーネルの仕組 み(flock)を利用するか、アトミックな処理(mkdir)で対応する。 • 各プログラミング言語毎にflockの実装が準備されている。 • TOCTOUを発音するとなんだか恥ずかしい。 January 21, 2026.
ツナギメオフライン ベンキョウカイ #4
Thanks! Have a good programming!! January 21, 2026. ツナギメオフライン ベンキョウカイ
#4