😂
現場改善#016 タスク実行の落とし穴
あらまし
ファイルサーバー上のフォルダを定期的に監視して実行するという、比較的簡単なコンソールアプリの開発している開発者が頭を抱えているので、聞いてみました。
私「どうしたん?」
開発者「デバッグ中はうまくいくのにタスクでタイマー実行すると動かないんですよ」
私「サーバー上でも?」
開発者「サーバー上ではだめで、開発機はOKです」
課題
下記の動きをするように開発していました。
- 実行されたら指定されたフォルダ内の拡張子「*.csv」のファイル一覧を取得
- ファイルの一覧に対して、DBへ登録する
しかし、開発機や手動実行では動くが、タスクスケジューラ経由で自動実行されません。
対策
悩みましたが、一度分かれば簡単な話でした。
- 共有フォルダのパスがDFS経由(エイリアスみたいな感じ)の指定になっていた
(例) \\domain.local\datalink\csvshare\ - 実態の共有フォルダのパスは \\fileserver.domain.local\csvshrea
DFSのパスはログイン後しか適用されないため、ログインしないでタスク実行する場合、正常にアクセスできない
という話でした。このあたり、DFSを知らないとハマりますのでご注意を。
開発機で正常に動作して、サーバーで動作しないのは、ログイン状態でタイマー実行している場合と、ログオフ状態でタイマー実行している違いでした。
もう一度同じことをするなら
パスはPGMに埋め込まずにDBにした方がいいかも。そしたらリコンパイルなしで再実行できるし。
Discussion