Cygwinのcygrunsrvで手軽にWindowsサービスを作ることが出来る。簡単だった。どうして今までやらなかったのか後悔した。
やってみたら、拍子抜けするくらいに簡単だった。
Windowsサービスを作って制御する cygrunsrv.exe
ポイントは以下の3点
とりあえず作ってみました。
rubyで無限ループを刷るプログラムを作る。
ruby で無限ループを作る。毎秒 /tmpにログを書き出す。
loop.rb
#!/usr/bin/env ruby $stdout = open "/tmp/log.txt" , "w" cnt = 0; loop{ cnt = cnt+1 puts "#{cnt} : #{Time.now.strftime('%Y/%m/%d %H:%M:%S')}" $stdout.flush sleep 1 }
サービス登録する
chmod +x loop.rb cygrunsrv --install takuya_test --path /home/takuya/loop.rb
実験で登録してもすぐに消せる。なので、気にせず登録しちゃってください。
サービスを停止する
cygrunsrv --stop takuya_test
サービスを削除する
cygrunsrv --remove takuya_test
実験が終わったのでサービスの登録を解除する。
応用を考えてみる
rubyの win32-changenotifyでファイル更新監視とか
定期的にファイルを消すとか。
録画ファイルをffmpegにかけるとか
ちょっとしたスクリプトをDaemonize出来るのが便利そうでした
cygrunsrvの使い方
情報出力オプション
cygrunsrv -h
cygrunsrv --helpcygrunsrv に関する包括的なヘルプ及びオプションを列記します。
cygrunsrv -v
cygrunsrv --versioncygrunsrv 実行形式のバージョン情報を出力します。
サービスの削除
cygrunsrv -R
cygrunsrv --removeレジストリからサービスを削除します。
サービスの開始
cygrunsrv -S
cygrunsrv --start既にインストールされたサービスを開始します。
サービスの停止
cygrunsrv -E
cygrunsrv --stop既にインストールされたサービスを停止します。
サービスのインストール最低限、以下のオプションと引数を指定する必要があります (勿論、--install そして --path の代わりに短縮形オプション -I そして -p を利用することが出来ます)。
http://www.sixnine.net/cygwin/translation/software/cygrunsrv.html
cygrunsrv --install svc_name --path /cygwin/style/path/to/daemon.exe
cronは?
cronも使えるよ。cronはcron-configというコマンドが用意されていて、そっちで常駐する。これはまた別記事に書きますね。