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キーを押します
②コンピュータの管理で「基本タスクの作成」をクリック
③作成ウィザードに従い、Windowsの再起動をスケジューラ
4-2. 仮想マシン起動のタスクを作成
①作成ウィザードに従い、仮想マシン起動をスケジューラ
※今回のトリガーは「コンピュータの起動時」を選択
②重要:「ユーザがログオンしているかどうかにかかわらず実行する」を設定
ヒント:Windowsが再起動する際に、ログオン前とログオン後の挙動が違います。
例えば、C:\Users\「ユーザ名」\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startupに格納するバッチファイル、リンク、ショットカットはWindows起動⇒ログオンしてから、始めて実行します。
「ユーザがログオンしているかどうかにかかわらず実行する」にするなら、ログオン前でもタスクが実行できます。大変助かります!
コメント欄