Windows 7 / server 2003 2008 など
○タスクスケジューラで実行したバッチ内のシェルがネットワークフォルダのファイルやプログラムを参照している。
このとき、このネットーワークフォルダへアクセスできないとき試してみること。
タスクマネージャーを実行しても
0x1
エラーなどになるとき、
たとえばZ:\ がネットワーク上のホスト名hogeのマシンの
\\hoge\dirname\ のネットワークドライブとして追加していて
バッチの内容がこんなとき
hogee.bat
-----------
echo "ugeee" > Z:\ugeee.log
------------
0)とりあず実行結果ログは出そう
hogee.bat > hogee.log 2>&1
という感じでタスクスケジューラのバッチ実行コマンド書式にログ出力を仕込む。
また、ネットワークフォルダを参照できているか
バッチ内に以下のようなコマンドをいれてログファイルを確認してみる。
dir Z:\
echo "ugeee" > Z:\ugeee.log
1)ユーザ
・Administratorユーザで実行してみる
・SYSTEMユーザで実行してみる。
2)管理権限で実行のチェックをあり・なしで試してみる
3)ネットワークドライブをシンボリックリンクにして試してみる
> mklink /d synbliclink Z:\
hogee.bat
-----------
echo "ugeee" > C:\synbliclink\ugeee.log
------------
4)シンボリックリンクをUNC形式にしてみる
> mklink /d synboliclink \\hoge.uhoo.co.jp\dirname\
hogee.bat
-----------
echo "ugeee" > C:\synbliclink\ugeee.log
------------
5)バッチ内のフォルダ指定をUNC形式にしてみる
hoge.bat
-------------
echo "ugeee" > \\hoge.uhoo.co.jp\dirname\ugeee.log
------------
UNCの書き方でドメイン(uhoo.co.jp)あるかないか、IP指定かどうかでも動きが変わってくる。
いろいろ試してみる。(シンボリックリンクを作る場合も同様)
6)作業フォルダを設定してみる
・バッチ内でcdする場合
hogee.batが c:\hogehogeにあるとき
--
cd c:\hogehoge
echo "ugeee" > Z:\ugeee.log
--
7)タスクスケジューラ内のメニュー内で作業フォルダの指定をする
windows server 2008 などでは作業フォルダ設定の場所が非常にわかりにくい。
さすがマイクロソフト。氏ね。
「新しい操作>開始(オプション)のエディットボックス」
8)java.exeなどのexeをバッチ内で実行しているなら
java.exeのプロパティで実行権限を変更してみる.
9)SYSTEMユーザの場合PATHを確認する。
Adminなど、他のユーザでは環境変数のパスが通っているのに
SYSTEMではなぜか通っていない場合がある。
バッチ内に
echo %Path% を仕込んで、0)で仕込んだログファイルhogee.logで
バッチの実行に必要なパスが
通っているかを確認する。
--
echo %Path%
echo "ugeee" > Z:\ugeee.log
--
通っていない場合はバッチ内でPathを追加する設定をする。
たとえば、バッチに実行にc:\hoge\hogeeeeディレクトリ内にある
プログラムへのPathが必要なとき
set Path=%Path%;c:\hoge\hogeeee
など追加してみる。
--
set Path=%Path%;c:\hoge\hogeeee
echo "ugeee" > Z:\ugeee.log
--
----------
ネットワークフォルダはつかいずらい。
windowsの権限管理は複雑すぎるし、仕様なのかバグなのかよくわからん。
(当然仕様ですというのがMSの言い分ですが)
要するにまともなネットワークシステムを作りたいならwindows serverなど使わずに
linuxを使ったほうが分かりやすいし早いし安定。
しかし、Linux使うときもsambaを使ったシステムは癖があり、早いか安定かは微妙。
(sambaで使用しているディレクトリをrsync対象ディレクトリにできないとか)
個人的な覚書のメモ書き。
言葉の意味やネットワークドライブの取り扱い、権限管理の詳細などはぐーぐる先生に聞いてください。
このブログはヲタな生活を淡々と描くものです。過度な期待はしないでください。