- PR -

atコマンドで他サーバにコピーできません。

投稿者投稿内容
見習管理者
ベテラン
会議室デビュー日: 2003/06/17
投稿数: 64
投稿日時: 2005-02-21 10:23
お世話になっております。

環境:
サーバA Win2000Server
サーバB Win2000Server
バッチ filecopy.bat
バッチの内容 copy c:\\temp\\foo.bar \\\\B\\temp$\\ > c:\\temp\\copy.log
バッチファイルはサーバAにあります。

サーバAからサーバBへfilecopy.batバッチをatコマンドで実行して定期的にファイルを
コピーしようとしているのですが、サーバBにコピーできません。
手動でバッチファイルを実行するとコピーはできます。
また \\\\B\\temp$をx:にネットワークドライブに割り当てて
copy c:\\temp\\foo.bar x:\\ > c:\\temp\\copy.log
としてもコピーされません。

どうしたらコピーできますでしょうか?
ご存知の方いらっしゃいましたらご教示お願いします。

Mattun
ぬし
会議室デビュー日: 2004/08/10
投稿数: 1391
投稿日時: 2005-02-21 11:52
まず、atコマンドなんてレガシーなものを使うのはやめましょう。
Windows2000ならタスクスケジューラが利用できますし、
atコマンドで登録したものも結局はタスクスケジューラに登録されるだけです。
atは過去との互換性のために残されてる機能だと思ってください。

atコマンドでは、ジョブを実行するユーザがLocalSystemになってしまい、
実行するユーザを明示的に指定することが出来ません。
そのため、ネットワーク共有フォルダへのアクセスなんて出来ません。
手動で実行する際は、今ログオンしているユーザの権限で実行するからこそ
うまく動作してるんでしょう。
タスクスケジューラでは、実行するユーザを明示的に指定できます。
見習管理者
ベテラン
会議室デビュー日: 2003/06/17
投稿数: 64
投稿日時: 2005-02-21 16:28
引用:

まず、atコマンドなんてレガシーなものを使うのはやめましょう。
Windows2000ならタスクスケジューラが利用できますし、
atコマンドで登録したものも結局はタスクスケジューラに登録されるだけです。
atは過去との互換性のために残されてる機能だと思ってください。


タスクスケジューラを使用すればよいのですが、会社の労働日のみファイルの
コピーをしたいので、オラクルのテーブルに会社の労働日のデータが入っているので、そのテーブルを参照してPL/SQLでatコマンドのバッチファイルを作成しています。
環境情報として書いていませんでした。申し訳ありません。

タスクスケジューラ用のファイルを自動で作成することは可能なのでしょうか?
ヘルプを見る限りタスクの追加で追加することしかできないようなのですが、
難しいでしょうか?
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2005-02-21 16:44
操作用端末などで XP が利用できるなら、at の代わりに schtasks を使用することで、実行アカウントを指定できます。

2000 しか使えないということであれば、atask.exe を使う方法も。

プログラムから完全に制御したいなら Task Scheduler API を使う。
ちゅき
常連さん
会議室デビュー日: 2005/02/18
投稿数: 41
お住まい・勤務地: 関西
投稿日時: 2005-02-21 17:00
自分がやったときにはScript書きました。取り合えずMSのページをご覧ください

「タスクのスケジュール」
http://www.microsoft.com/japan/technet/scriptcenter/scripts/os/tasks/default.mspx
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2005-02-21 23:42
引用:
「タスクのスケジュール」
http://www.microsoft.com/japan/technet/scriptcenter/scripts/os/tasks/default.mspx



こちらだと、内部処理はAT Commandと一緒なので解決にはならないでしょうね。
見習管理者
ベテラン
会議室デビュー日: 2003/06/17
投稿数: 64
投稿日時: 2005-02-22 09:40
引用:

2000 しか使えないということであれば、atask.exe を使う方法も。


2000しか環境がありませんので、ataskを確認してみました。
が、うまく実行できません。

以下のような状況になっているのですが、どうしたら実行可能な状態にできるでしょうか?
どこか自分の設定が間違っているでしょうか?

atask --new test.job
atask --set test.job ApplicationName "c:\temp\filecopy.bat"
Account "account" Password "pass" TASK_FLAG_DELETE_WHEN_DONE 1
TASK_FLAG_DISABLED 1 wBeginYear 2005 wBeginMonth 02 wBeginDay 22
wStartHour 09 wStartMinute 09 TriggerType 0

を実行してタスクの画面を見ると無効になっています。
そのtestというタスクのプロパティを確認すると"実行する"というところにチェックが
入っていないのでチェックを入れるとスケジュールされるのですが、その時間になっても
実行されません(実行する時間の時はログオフしています)。
また、手動で実行すると実行できます。

atask --info test.job
を実行した結果は以下のとおりになっています。

JobName: test.job
ApplicationName: c:\temp\filecopy.bat
Parameters:
WorkingDirectory:
Account: account
Flag: TASK_FLAG_DELETE_WHEN_DONE
Flag: TASK_FLAG_DISABLED
wBeginYear: 2005
wBeginMonth: 2
wBeginDay: 22
wEndYear: 0
wEndMonth: 0
wEndDay: 0
wStartHour: 9
wStartMinute: 9
MinutesDuration: 0
MinutesInterval: 0
rgFlag: TASK_TRIGGER_FLAG_DISABLED
TriggerType: TASK_TIME_TRIGGER_ONCE

申し訳ありませんがよろしくお願いします。

井上孝司
ぬし
会議室デビュー日: 2001/09/08
投稿数: 668
お住まい・勤務地: 東京都
投稿日時: 2005-02-22 10:12
井上です。

古くからある問題なんですけどねぇ…
Task Scheduler サービスを、LocalSystem ではなくて、当該サーバにアクセス権を持つユーザーの資格で実行させれば解決しますよ。[サービス] 管理ツールで、サービスのプロパティ画面を調べてみてください。
_________________
www.kojii.net

スキルアップ/キャリアアップ(JOB@IT)