この方法なら、サービス起動しないが常駐させたいexe形式のアプリケーションを汎用的に自動復旧する事が出来ます
こんな事を考えるようになった経緯は、極稀にTVRockが落ちて動かなくなっている事があるのでTVRockが停止した時に自動復旧させたいという思い付きです
番組表を見て予約とかしようとした時に処理が重くなってtvrockが停止するという事が稀にあります
今までは面倒ですがリモートログインしてアプリケーションを手動で再立ち上げしていました
時にはTVRockが動いておらず、録画が出来ていない・・・なんて悲惨なこともありました
複雑な形にしたくない
出来れば簡潔に、簡素に、簡便にがモットーの私なので、複雑なコードにはしたくありません
find使ってプロセス見つけたりif文でどうのこうのはしたくありません
というわけで、超簡単な自動復旧方法を考えました
アプリの巡回起動
巡回起動というとめんどくさそうと思うかもしれませんが、これは文字の装飾でしかありません
あまりに単純過ぎてダサいので、表現ぐらいは・・・という軽い思いです
では実際のコードを見て頂きましょう
@if not "%~0"=="%~dp0.\%~nx0" start /min cmd /c,"%~dp0.\%~nx0" %* & goto :eof :LOOP start /wait "" "C:\tv\tvrock\tvrock.exe" echo %DATE% %TIME% GOTO LOOP
これでもややこしい・・・と思う方もいるかもしれません
内容は以下の通りです
@if not “%~0″==”%~dp0.\%~nx0″ start /min cmd /c,”%~dp0.\%~nx0” %* & goto :eof
魔法の言葉です。これを入れてるだけでバッチが自動的に最小化されて起動します
こちらのブログを参考にさせて頂きました → http://d.hatena.ne.jp/firedfly/20091124#p1
:LOOP
ループという戻り点を設けてます。あとでここに戻ってきます
start /wait “” “C:\tv\tvrock\tvrock.exe”
〇〇というアプリケーション(ここではtvrock.exe)の起動後、アプリが終了するまで待機します。アプリの前の””はこれを入れてないとコマンドプロンプトがバンバン出てきて邪魔なので入れてます
echo %DATE% %TIME%
この行は別に無くてもいいですが、いつ落ちたのかの時間を表示します。これをテキストに保存してログにしたい場合は、>> C:\logs.txtみたいにすれば保存出来ます
GOTO LOOP
先ほど設けた:LOOPに戻ります
という非常に簡素な内容です
後は、このバッチファイルをタスクマネージャでシステムが起動した時に自動実行するようにするだけで、何とも簡単な自動復旧システムの出来上がりです
満足。
TVRockの場合注意点あり
TVRockを使ってる人場合は、ログイン時の自動起動のチェックを外してくださいね
これで安心