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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
人間はどの意思決定を手放せるのか
kawasima
14
6.9k
品質と信頼性を地続きにする
grimoh
0
430
株式会社シーエーシー エンジニア向け会社紹介資料
cac
0
57k
Slack上でインフラをトラブルシュートする! Agentic Platform Engineeringの第一歩
teru0x1
4
1.7k
AI de Idea
kawaguti
PRO
2
110
2026_devsumi_ozono.pdf
o3
3
510
顧客に向き合う開発組織へ。リアーキテクチャとフィーチャーチーム化で挑む組織改革
safie
0
1.9k
Screen Lens - 今見てる画面を翻訳する
komagata
0
310
Claude in Chrome 入門 / Introduction to Claude in Chrome
cielo1985
0
820
ADKで始める業務改善 - AIエージェント開発時の考えと設計
harappa80
2
120
登壇の自信を奪う3匹のオバケ / 3 Ghosts That Rob You of Your Confidence in Public Speaking
pauli
8
950
AIによるクリエイティブ生成を行う上での試行錯誤
plaidtech
PRO
0
150
Featured
See All Featured
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
380
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
700
What's in a price? How to price your products and services
michaelherold
247
13k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
500
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
230
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
300
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
Side Projects
sachag
456
43k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
The SEO Collaboration Effect
kristinabergwall1
1
560
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
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