マキモノ
業務自動化無料✅ 公式検証済みv1.0.0 / 更新

Windows定期タスクが同じ秒に起動すると片方が無音死する(隠しランナーの共有ログとcmd >> 排他)

result=1・ログ0行で死ぬ定期タスクの真因が、隠しランナーが全タスクのログを1ファイルに流し cmd の >> が排他で開くことだった件。再現手順・切り分け・ログ名分離と設置先の自己更新・同一秒起動テストまで

出品者: kim@orgiast.jp📖 読込 約1,398トークン (約2円)💰 コスパ 122
トークン節約メーター95%節約
ゼロからAIに作らせた場合18万トークン
このMDを読ませた場合9,000トークン

17.1万トークンの節約 (API料金換算で約260円分)。 要件定義・技術調査・試行錯誤ぶんのトークンがまるごと不要になります。※ 出品者申告とレビューに基づく推定値。モデル・タスク内容により変動します。

この巻物について

Windows定期タスクが同じ秒に起動すると片方が無音死する(隠しランナーの共有ログとcmd >> 排他)」は、業務自動化カテゴリのAI指示書(MDファイル)です。result=1・ログ0行で死ぬ定期タスクの真因が、隠しランナーが全タスクのログを1ファイルに流し cmd の >> が排他で開くことだった件。再現手順・切り分け・ログ名分離と設置先の自己更新・同一秒起動テストまでこの巻物をAIに読み込ませると、ゼロから設計・調査する場合に比べて 約17.1万トークン(API料金換算で約260円)・95%のトークンを節約できます。

カテゴリ
業務自動化
対応AI
claude-code、cursor、codex-cli
ライセンス
商用利用可 (再販不可)
価格
無料
ゼロから開発時
約18万トークン
この巻物使用時
約9,000トークン
節約量
約17.1万トークン (約260円)
更新日
2026-09-03

使い方 (AIに渡す3つの方法)

いちばん簡単なのはワンライナー。Claude Code のターミナルに貼るだけです。

⬇ .md をダウンロード
claude "https://makimono-md.vercel.app/api/v1/files/windows-cmd/raw を読み込んで、この指示書どおりに実装して"
claude-codecursorcodex-cliライセンス: 商用利用可 (再販不可)

中身

Windows 定期タスクが「result=1・ログ0行」で無音死する — 隠しランナーの共有ログと cmd >> 排他の罠

症状

  • タスクスケジューラの Last Task Result0x1 なのに、ジョブ本体(PowerShell / Node)のログには開始行すら無い
  • 失敗するのは決まった時刻で、同じ秒に別のタスクも起動している(毎時00分・x5分など)
  • 毎時衝突する2本のうち、毎回どちらか1本だけが成功する
  • Task Scheduler の Operational イベントログは無効になっていて、追えない

真因(再現手順つき)

コンソール窓を出さずにタスクを動かす定番 run-hidden.vbs(wscript.exe 経由)は、子プロセスを cmd.exe /d /s /c "<子コマンド> >> <ログ> 2>&1" の形で起動する。ここに2つの罠が重なる。

  1. ログ名の決め方: 「2番目の引数の basename」をログ名にすると、powershell.exe -NoProfile -File ... の形では 全タスクのログ名が -NoProfile.log になり、全タスクが1ファイルを共有する
  2. cmd の >> は書込共有を許さない: 先発の cmd がログを開いている間に後発の cmd が >> で開くと 「別のプロセスが使用中です」で cmd 自身が exit 1 になり、子(PowerShell/Node)は起動すらしない。 だから PowerShell 側の try/catch・Mutex・ログ書き込みリトライは一切効かない

再現(PowerShell):

$log = "$env:TEMP\collide.log"
Start-Process cmd -ArgumentList "/d /s /c `"`"powershell`" `"-NoProfile`" `"-Command`" `"Start-Sleep 6`" >> `"$log`" 2>&1`"" -WindowStyle Hidden
Start-Sleep -Milliseconds 1500
$p = Start-Process cmd -ArgumentList "/d /s /c `"`"cmd`" `"/c`" `"echo x`" >> `"$log`" 2>&1`"" -Wait -PassThru -WindowStyle Hidden -RedirectStandardError "$env:TEMP\collide.err"
$p.ExitCode        # => 1
Get-Content "$env:TEMP\collide.err"   # => プロセスはファイルにアクセスできません。別のプロセスが使用中です。

切り分け手順

  1. Get-ScheduledTask | Get-ScheduledTaskInfoLastRunTime が同じ秒のタスクを突合する(イベントログに頼らない)
  2. ランナー(vbs/cmd)が共有しているファイル(ログ・pid・ロック)を洗う。~\.claude\logs\-NoProfile.log のような 「フラグ名のログ」があれば確定
  3. 「main にマージ済みの修正」が設置先に届いているかを sha256 で比べる。ランナーは設置先(~\tools\ 等)にコピーされて 動くことが多く、リポジトリ側を直しても設置先が旧版のまま、はよくある

直し方

  1. ランナーのログ名は対象スクリプト名(拡張子 .ps1/.mjs/.js を持つ最初の引数。ラッパー自身は除外)から採る
    For i = 1 To args.Count - 1
      ext = LCase(fso.GetExtensionName(args(i)))
      If ext = "ps1" Or ext = "mjs" Or ext = "js" Then
        If LCase(fso.GetFileName(args(i))) <> "<ラッパー名>.ps1" Then
          baseName = fso.GetBaseName(args(i)) : Exit For
        End If
      End If
    Next
    
  2. 設置先の更新経路を作る: 夜間同期ラッパーの自己更新に「ランナーも sha256 が違えば更新」を足す。 更新は <設置先>.new-<PID> へコピー → Move-Item -Force原子置換(実行中の wscript は起動時に読み切っているので安全)。 設置先が無い PC では何もしない(勝手に新規設置しない)。更新失敗でも本体の実行は続ける(fail-open)
  3. 検証は「衝突していた2タスクを Start-ScheduledTask で同一秒に起動し、両方 rc=0 かつ別ログに出る」ことで取る。 正常系1本の exit 0 では何も確かめられない

ついでに起きやすい別バグ

Windows PowerShell 5.1 で $x = $null; [datetime]::TryParse($s, [ref]$x)MethodCountCouldNotFindBest で落ちる。 [datetime]$x = [datetime]::MinValue のように型付きで初期化する。$ErrorActionPreference = 'Stop' だとこれだけで exit 1 になる。

よくある質問

「Windows定期タスクが同じ秒に起動すると片方が無音死する(隠しランナーの共有ログとcmd >> 排他)」とは何ですか?

result=1・ログ0行で死ぬ定期タスクの真因が、隠しランナーが全タスクのログを1ファイルに流し cmd の >> が排他で開くことだった件。再現手順・切り分け・ログ名分離と設置先の自己更新・同一秒起動テストまで

どれくらいトークン(費用)を節約できますか?

ゼロから開発すると約18万トークンかかりますが、この巻物を使えば約9,000トークンで済みます。差し引き約17.1万トークン(API料金換算で約260円)・95%の節約です。

どうやって使いますか?

無料です。MDファイルを Claude Code などのAIに読み込ませるだけ。ワンライナーをターミナルに貼れば実装が始まります。要件定義や技術調査を省いて実装だけにトークンを使えます。

どのAIツールに対応していますか?

claude-code、cursor、codex-cli に対応しています。

商用利用できますか?

ライセンスは「商用利用可 (再販不可)」です。

🤝 自分でAIを動かすのは、まだ不安…という方へ

この巻物の内容を、AIを使うプロに丸ごと任せることもできます。姉妹サービスAI代行堂なら「LINEで頼むだけで、仕事が完成」。

AI代行堂を見る →

関連する巻物

この巻物、誰かのトークンも救えます

𝕏 で節約レシートをシェア