😂

現場改善#016 タスク実行の落とし穴

2022/10/15に公開

あらまし

ファイルサーバー上のフォルダを定期的に監視して実行するという、比較的簡単なコンソールアプリの開発している開発者が頭を抱えているので、聞いてみました。

私「どうしたん?」
開発者「デバッグ中はうまくいくのにタスクでタイマー実行すると動かないんですよ」
私「サーバー上でも?」
開発者「サーバー上ではだめで、開発機はOKです」

課題

下記の動きをするように開発していました。

  1. 実行されたら指定されたフォルダ内の拡張子「*.csv」のファイル一覧を取得
  2. ファイルの一覧に対して、DBへ登録する

しかし、開発機や手動実行では動くが、タスクスケジューラ経由で自動実行されません。

対策

悩みましたが、一度分かれば簡単な話でした。

  • 共有フォルダのパスがDFS経由(エイリアスみたいな感じ)の指定になっていた
    (例) \\domain.local\datalink\csvshare\
  • 実態の共有フォルダのパスは \\fileserver.domain.local\csvshrea

DFSのパスはログイン後しか適用されないため、ログインしないでタスク実行する場合、正常にアクセスできない

という話でした。このあたり、DFSを知らないとハマりますのでご注意を。

開発機で正常に動作して、サーバーで動作しないのは、ログイン状態でタイマー実行している場合と、ログオフ状態でタイマー実行している違いでした。

もう一度同じことをするなら

パスはPGMに埋め込まずにDBにした方がいいかも。そしたらリコンパイルなしで再実行できるし。

Discussion