Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Bashスクリプトにおけるバッチ処理の同時実行制御について #ツナギメオフライン.4
Search
akase244
January 21, 2026
Technology
0
65
Bashスクリプトにおけるバッチ処理の同時実行制御について #ツナギメオフライン.4
ツナギメオフライン ベンキョウカイ #4で発表したスライドです。
akase244
January 21, 2026
Tweet
Share
More Decks by akase244
See All by akase244
疎通・有効期限を確認するコマンド #ツナギメオフライン.3
akase244
0
48
AIサービスに利用規約について聞いてみた #ツナギメオフライン.2
akase244
0
48
なぜ、新たに勉強会を始めるのか? #ツナギメオフライン.1
akase244
0
71
ある日突然あなたが管理しているサーバーにDDoSが来たらどうなるでしょう?知ってるようで何も知らなかったDDoS攻撃と対策 #phpcon.2024
akase244
3
8.8k
GoナニモワカラナイけどChatGPTと共に解決したい課題が解けるかやってみた #fukuokago
akase244
0
130
ブラウザの向こう側で「200 OK」を返すまでに何が起きているのか調べてみた #phperkaigi
akase244
7
3.3k
FQDN(ドメイン名)のバリデーションが意外と面倒だった #phpcon2022
akase244
1
1.9k
PHPカンファレンス福岡2019のお知らせ #laraveljpcon
akase244
0
200
LaravelのQuery Scopesについて #fukuokaphp
akase244
1
510
Other Decks in Technology
See All in Technology
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
3.7k
Kiro Power - Amazon Bedrock AgentCore を学ぶ、もう一つの方法
r3_yamauchi
PRO
0
110
AI Agent Agentic Workflow の可観測性 / Observability of AI Agent Agentic Workflow
yuzujoe
5
2.3k
BPaaSオペレーション・kubell社内 n8n活用による効率化検証事例紹介
kubell_hr
0
160
困ったCSVファイルの話
mottyzzz
1
350
CodeRabbit CLI + Claude Codeの連携について
oikon48
1
580
ReproでのicebergのStreaming Writeの検証と実運用にむけた取り組み
joker1007
0
370
Exadata Database Service ソフトウェアのアップデートとアップグレードの概要
oracle4engineer
PRO
1
1.2k
[Iceberg Meetup #4] ゼロからはじめる: Apache Icebergとはなにか? / Apache Iceberg for Beginners
databricksjapan
0
320
AI Agent Standards and Protocols: a Walkthrough of MCP, A2A, and more...
glaforge
1
480
AWS Amplify Conference 2026 - 仕様からリリースまで一気通貫生成 AI 時代のフルスタック開発
inariku
3
330
Oracle Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
1
950
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
37
7.1k
Context Engineering - Making Every Token Count
addyosmani
9
620
Chasing Engaging Ingredients in Design
codingconduct
0
99
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
49
Scaling GitHub
holman
464
140k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
290
Claude Code のすすめ
schroneko
67
210k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.1k
Agile that works and the tools we love
rasmusluckow
331
21k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Exploring anti-patterns in Rails
aemeredith
2
230
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
620
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