ようこそ!
答えてねっと for Businessは、
マイクロソフトが運営する
ビジネスで使うパソコンや
ITに関するQ&Aサイトです。

質問

netstop、shutdownコマンドを使用したシャットダウンについて

製品名:その他/その他

現象:知りたい/機能

この質問は解決で締め切られています

サーバを定期的に再起動させる為、netstopとshutdownコマンドを使用した、batファイルを作成し、定期的に動作させようとしています。

順序としては、netstopにて、現在動作しているサービス(netstartコマンドにて取得)を停止させ、その後、shutdownコマンドにて再起動させようとしております。

shutdownコマンドは、「コンピュータのロック」状態だと再起動に失敗してしまいますので、強制シャットダウンスイッチを付加しようとしています。

この際、netstopとshutdownの間に動作待ち時間を設けなくても、正常にサービスが停止され、再起動がかかりますでしょうか?


強制シャットダウンスイッチを付加してしまうと、netstopによるサービス停止中でも
強制再起動がかかってしまい、サービスが正常に停止しないのではないかと思い、
質問致しました。

質問者からのコメント

  • 投稿日時:2008/08/18 10:48

>ご回答頂いた皆様

ありがとうございました。
皆様に頂いた回答を元に、作業をしてみたいと思います。

回答1 (この回答は質問に対する回答です)

  • 投稿ID:A2008051454
  • 投稿日時:2008/08/08 17:26

そもそもシャットダウンは全てのサービスを停止させる行為だと思っていたのですが、netstopせずに普通にシャットダウンだけで済ませるわけにはいかないのでしょうか?

  •  

回答2 (この回答は質問に対する回答です)

  • 投稿ID:A2008051457
  • 投稿日時:2008/08/08 18:27

以下、ご参考までに。


当方、外部委託会社にブレードサーバーを預けています。
開かれているファイルが無い状態でないとバックアップ処理が起動しない環境であるため、net stopコマンドでサービスを一旦停止させてからバックアップ処理を実行させています。

net stop "IIS Admin Service" /y
net stop "SQL Server (MSSQLSERVER)" /y
<このあとバックアップ処理コマンド>

サービスの停止とバックアップ処理は、上記のようにバッチファイルの中で連続して動かしています。
もしサービスが停止中であれば、開かれているファイルが存在するため、バックアップがこけるのですが、今までは特に問題が起きたことは、ありません。
したがって、サービスの停止が完了(または失敗)するまで、net stopコマンドは制御を返さないものと考えています。


余談ですが、バックアップ終了後はnet startコマンドでサービスを再開させています。
サーバーの定期的な再起動だけが目的であれば、Wincentさんがおっしゃるように、サービスを完全に停止させてから再起動という処理は、特に不要かと思われますが、いかがでしょうか。

  •  

回答3 (この回答は回答2に対する回答です)

  • 投稿ID:A2008051459
  • 投稿日時:2008/08/08 19:25

Wincentさん、あつきちさん

ご回答ありがとうございます。

私の方で使用としているshutdownコマンドは、-fスイッチ(実行中のプロセスを警告なしで閉じる)を付加しようとしています。
「実行中のプロセスを警告なしで閉じるということ」は、サービスが正常に停止しないと
思われます。サーバが正常に停止しないと、再起動後、最悪、そのサービスが起動しなくなる事態も考えられます。

ですので、サービス停止後にshutdownを行なおうと考えました。

以上が質問の意図となります。

  •  

回答4 (この回答は回答3に対する回答です)

  • 投稿ID:A2008051461
  • 投稿日時:2008/08/08 19:42

Shutdown -f は「実行中のアプリケーションを警告なしに閉じる」オプションですね。
ログオン状態で、メモ帳などのアプリケーションが起動された状態であれは、この -f オプションをつけないとシャットダウン出来ません。

しかし、サービスに関しては -f をつけなくても、スタートボタンからのシャットダウンと同様に全て正常に終了してくれるはずです。

  •  

回答5 (この回答は回答4に対する回答です)

  • 投稿ID:A2008051507
  • 投稿日時:2008/08/11 09:20

ああ、プロセスが起動してるんですね……。すみません、素人意見で。

  •  

回答6 (この回答は回答5に対する回答です)

  • 投稿ID:A2008051524
  • 投稿日時:2008/08/11 13:40

Wincentさん

申し訳ありません。こちらの記述不足でした。
プロセスが起動した状態になります。

  •  

回答7 (この回答は回答4に対する回答です)

  • 投稿ID:A2008051531
  • 投稿日時:2008/08/11 14:31

OMEGA-Tさん

ご回答ありがとうございます。
私の記述不足で申し訳ございません。

shutdownコマンドに、「-f」オプションを付けようとしているのは、
対象サーバが「コンピュータのロック状態」になっている際に、
shutdownコマンドだけだと、シャットダウンに失敗してしまうのが
理由となります。
よって、「-f」オプションは今回、必須の設定になります。

この「-f」オプションを使用したshutdownを行なった際、正常に
サービスが停止されてからシャットダウンが行なわれるか不明で
あったため、shutdownの前に、net stopによるサービス停止を
行なっています。

shutdown -fが、net stopによるサービス停止を待たずに、
シャットダウンしてしまうかどうかも不明であったため、
今回、質問させていただきました。

  •  

回答9 (この回答は回答7に対する回答です)

  • 投稿ID:A2008051544
  • 投稿日時:2008/08/12 08:23

>shutdown -fが、net stopによるサービス停止を待たずに、シャットダウンしてしまうかどうか

net stopとshutdownを別々のbatで同時に実行したとすれば、net stopの実行中であってもshutdownコマンドは実行されると思いますが、シャットダウンのプロセスの中でもサービスは停止は行われるはずなので、サービスが停止されずにパソコンがシャットダウンされることは基本的にはないはずです。

batの中でnet stopとshutdownを続けて書いた場合には、net stopコマンドの実行終了を待ってからshutdownコマンドが実行されるはずです(net stopをstartコマンドで起動した場合にはこの限りではありませんが)。

この動作は-fとは関係のない動作だと思います。

  •  

回答8 (この回答は質問に対する回答です)

  • 投稿ID:A2008051532
  • 投稿日時:2008/08/11 14:37

チャブーンです。

まず、net stop コマンドですが、私の記憶の限りですけれど「同期的なコマンド」だったと思います。

同期的なコマンド、というのは (この文章での意味合いですが) 、コマンドの「完全な」実行結果が戻ってくるまで、他の処理には進まない、ということです。これに対して、コマンドを実行したら、「コマンドが正常に命令された」ことだけをチェックして、その結果を戻さない場合「非同期的なコマンド」ということがあります。

こういう場合、普通はバッチファイルに net stop [サービス名] コマンドを先に書き、shutdown コマンドを後に書けば、net stop でサービスが終了、または終了に失敗したことが戻ってきた時点で shutdown コマンドに処理が移りますので、問題はなかったと思います。

うえの考え方では、「サービスはnet stopコマンドで必ず終了する」「サービス終了に失敗してshutdownコマンドを実行しても特に問題なし」という前提のバッチファイルになってしまうので、「サービス終了に失敗したらshutdownコマンドは実行しない」としたい場合、バッチファイルの作り込みが必要になります。

ここまで書くと、「shutdown コマンドではサービス終了のためのコントロールメッセージ等もきちんと処理されるので、ほっといても問題ないのでは?」という疑問をもたれる方は必ずいらっしゃると思います。

正論としてはそのとおりなのですが、サービスアプリケーションによっては、「Windows サービスアプリケーションの作法」に添って作られていないものもあり、こういうものでは、正常なサービス終了の動作は期待できなかったり、アプリケーション側で (正常終了の扱いとならないなど) 問題が起こったりすることがあります。これを回避するため、事前に net stop コマンド (またはアプリケーションが指定する終了コマンド) で終了させておいてあげる、というテクニックが必要となることがあります。

  •