Powershellでサービスを作れるようにしてみました。
何に使うか・どのように使うか
WindowsにはLinuxのデーモンスクリプトに相当する仕組みがないため、
LinuxのOSSをWindowsに移植して、無事ビルドが出来ても、サービスの実装がなく、
プロセスを直起動させて無理やり常駐させている事例が多々あります。
PowerPuppetを使うとこのようなOSSソフトにも自動起動の機能等をPowershellというインタプリタのシェル言語をつかって柔軟に付け加えることができます。
Powershellはシェル言語なため、プロセスのロギング、ファイルの後始末、子プロセスも含めたプロセス監視等インフラ観点のロジックをC#よりも簡易的に記述できます。
GitHubのReadmeにFileSystemWatcherと組み合わせる使い方を想定していると書きましたが、
このFileSystemWatcherも結構癖があるみたいで、挙動を見て細かいロジック修正が必要、
そうなるとインタプリタでシェルというPowershellと相性がいいと思い、想定使用例に挙げました。
導入手順
- PowerPuppetをgit cloneでとってきます
git clone https://github.com/stofu1234/PowerPuppet
- プロジェクトをビルドし、PowerPuppet.exeを作成します
MSBuild.exe /property:Configuration=Release PowerPuppet.csproj
(MSBuild.exeは\Microsoft.NET\Framework[|64]\v*.*.*****にあります)
2.PowerPuppet.exeを任意の名前にリネームします
例) PowerPuppet.exe → nginx_service.exe
3.同名の.ps1ファイルを用意します
例) nginx_service.ps1
4.InstallUtil.exeでリネームしたexeを登録します
例) InstallUtil.exe nginx_service.exe
(InstallUtil.exeは\Microsoft.NET\Framework[|64]\v*.*.*****にあります)
gituhub上のsamplecfgフォルダに以下のサンプルps1があります
nginx_service.ps1 → Nginx用サンプルps1
node_service.ps1 → Node.js用サンプルps1
サンプルps1を参考に、各種アプリ用のps1を作ってください。
自動起動(start・stop)以外のロジックどう実装すればいい?
OnStart、OnStopというサービスAPIに呼ばれる以外のメソッドを定義し、コマンドラインパラメータによってそれぞれのメソッドが呼び出されるようにすればいいと思います。