サイドバーの壁紙
博主头像
tin博主等级

子の曰わく、我れ三人行なえば必ず我が師を得(う)。其の善き者を択びてこれに従う。其の善からざる者にしてこれを改む。

  • 累積執筆 72 記事
  • 累計作成 32 タグ
  • 累計受入 2 コメント

目 次CONTENT

記事目次

Windowsと仮想マシン(ゲストマシン)の定期再起動

tin
tin
2023-07-01 / 0 コメント / 2 いいね! / 159 読み / 1,138 文字

1.背景

①自分のブログサイト(halo)が下記のような構成となります。
 PC(Win11)⇒仮想マシン(Centosゲストマシン)⇒Docker(nginx、MySQL、halo)
②PCと仮想マシンは24時間稼働。
③障害率を削減するために、毎日3:00に「nginx、MySQL、halo」コンテナの再起動を実施しています。
④しかしながら、土台となる仮想マシン(Centosゲストマシン)は何らかの理由で動いていない場合は出ています。数日間の連続稼働で、PCと仮想マシンを障害なく維持するのは厳しいですね。
⑤上記の背景で、定期的にPCと仮想マシン(Centosゲストマシン)の再起動を検討。

2.コマンド分析:

①PCの再起動コマンド:shutdown /r /f /t 0
②仮想マシンの起動コマンド:C:\"Program Files (x86)"\VMware\"VMware Workstation"\vmware.exe -x "C:\01_tool\01-xuniji\CentOS7-06halo1.6\CentOS7-06halo1.6.vmx"
・C:“Program Files (x86)”\VMware"VMware Workstation"\vmware.exeはvmwareの実行体。※自分の環境に合わせて修正要。
・-xは実行オプション。
・C:\01_tool\01-xuniji\CentOS7-06halo1.6\CentOS7-06halo1.6.vmxは仮想マシンのゲストマシンの実行体。※自分の環境・起動したいゲストOSに合わせて修正要。

3.バッチファイル実装

3-1. PCの再起動バッチファイル:win-restart.bat

@echo off
rem ###ログファイルの定義、時間フォーマットの定義
set logfile=C:\00_work\05_log\halo-setdown-up.log
set yyyyMMdd=%date:/=%
set hhmmss=%time::=%
set hhmmss=%hhmmss:~0,6%

rem ###ログメッセージ定義
set Message_START="windows restart."

rem ###ログ出力
echo %date:/=-% %time:.=,%0 %Message_START% >> "%logfile%" 2>&1

rem ###win再起動
shutdown /r /f /t 0

3-2. 仮想マシンの起動バッチファイル:halo-autostart.bat

@echo off
rem ###ログファイルの定義、時間フォーマットの定義
set logfile=C:\00_work\05_log\halo-setdown-up.log
set yyyyMMdd=%date:/=%
set hhmmss=%time::=%
set hhmmss=%hhmmss:~0,6%

rem ###ログ出力
set Message_START="halo blog site service start."

rem ###プロセスチェック(vmwareが既に稼働する場合、起動処理をスキップ)
tasklist | find "vmware.exe" > NUL
if %ERRORLEVEL% == 0 (
  echo %date:/=-% %time:.=,%0 "vmware is running,please stop it first!" >> "%logfile%" 2>&1
) else (
  echo %date:/=-% %time:.=,%0 %Message_START% >> "%logfile%" 2>&1
  start C:\"Program Files (x86)"\VMware\"VMware Workstation"\vmware.exe -x "C:\01_tool\01-xuniji\CentOS7-06halo1.6\CentOS7-06halo1.6.vmx"
)

4.タスクスケジューラを定義

4-1. PCの再起動のタスクを作成

①以下の方法でコンピュータの管理を開きます。

「Windowsキー + R」キーを同時に押して、実行ダイアログを開きます。
実行ダイアログに 「compmgmt.msc」 と入力し、Enterキーを押します
image-1688180026459

②コンピュータの管理で「基本タスクの作成」をクリック

image-1688180152689

③作成ウィザードに従い、Windowsの再起動をスケジューラ

image-1688185129777
image-1688185160579

4-2. 仮想マシン起動のタスクを作成

①作成ウィザードに従い、仮想マシン起動をスケジューラ

※今回のトリガーは「コンピュータの起動時」を選択
image-1688185532946
image-1688185565074

②重要:「ユーザがログオンしているかどうかにかかわらず実行する」を設定

image-1688185813965
ヒント:Windowsが再起動する際に、ログオン前とログオン後の挙動が違います。
例えば、C:\Users\「ユーザ名」\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startupに格納するバッチファイル、リンク、ショットカットはWindows起動⇒ログオンしてから、始めて実行します。

「ユーザがログオンしているかどうかにかかわらず実行する」にするなら、ログオン前でもタスクが実行できます。大変助かります!

2
  • 2

コメント欄