Hatena::ブログ(Diary)

ひらいて このページをアンテナに追加 RSSフィード

2007-06-04

バッチの二重起動防止

以前バッチの二重起動防止用にロックファイル生成するロジックを作りこんで失敗したことがあって(バッチ実行中にサーバがブルーバックなんかでリブートすると、次回起動時にファイルを手で消さなければいけなくなる)、何かもっといい方法が無いもんかねとたまに考えることがあったのだけど、今日思い出してなんとなく検索してみたらすげぇイカス方法を発見(「バッチファイルの二重起動を防止する。」)。


オリジナルの方法だと、拡張子付けずにバッチファイル実行すると拡張子無しのごみファイルが出来てしまう。几帳面に実行ファイル名を展開し、ついでに本体ロジックが括弧内というのがその後何かと面倒くさいので括弧を外し、二重起動時は特定のエラーレベルを返すようにすると、パターンとしては以下のような感じになるのかしら


rem バッチのERRORLEVELが -1 の場合は二重起動でエラー
set RC=-1
call :main 0>>"%~dpnx0"
exit /b %RC%

:main
notepad.exe
set RC=0

なまえなまえ 2008/10/18 09:50 はじめまして。
バッチの二重起動防止方法を検索していて、このサイトを発見しました。
まさに私が実現したかったことです!ありがとうございます。ただ、コマンドに不慣れなもので、ロジックがまだよく理解できません。
こちら、0という値を起動したバッチ名に書き込んでいるようですが、
起動しているバッチファイル自身には何も影響がないのでしょうか?
またそのことにより、なぜ2度目以降のバッチで0の書き込み時にエラーになるのでしょうか?

質問攻めですみませんが、、、
お時間があれば教えてください。

s0us0u 2009/10/26 02:36 "0>>" は、標準入力の出力を追記でリダイレクトするって意味ですな。元ネタにあるようにそのファイルディスクリプタから何かデータが出力される事は無いので出力先のファイルが壊れることはありませんと、

標準エラー出力を標準出力にリダイレクトするときに 2>&1 と書くときの、"2>" と似たようなもの。

2度目以降でプログラム実行が失敗するのは、1回目のプログラム起動時に(0>>〜の部分が)バッチファイル自身にOSがファイルロックをかけてしまうため。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証