LoginSignup
45
43

More than 5 years have passed since last update.

go で Windows service を作成する

Last updated at Posted at 2014-12-14

概要

golangでdaemonを作成しそれをWindowsに移植することになったので、golang製daemonをwindowsサービス化させるためのメモです。

手段

  1. NSSM (the Non-Sucking Service Manager)を使う方法

  2. kardianos/serviceを使う方法

の2通りの手段があるがあるようです。
前者は、NSSMというサービス登録ツールを利用してプログラムをサービスぽくWindowsに認識させる方法と、 後者は真面目にサービスプログラムらしく実装できるパッケージを使う方法となっています。

今回はkardianos/serviceを使う方法を紹介します。

kardianos/service

このパッケージは、Windowsサービスを作ることに特化したパッケージではなく、Linuxのupstartを使ったdaemonの作成や、MacOSのdaemonの作成にも対応しているようです。

使い方

使い方は、
service/simple/example/main.go 通りになるのですが、

とても簡単で、
ちょっとためしてみようと、exampleを書き写したのですが、
結局、doWork()にメイン処理を書くだけで、殆どオリジナルexampleそのままになりました。

ビルド

Macでコンパイルするので、Go のクロスコンパイル環境構築を参考にコンパイル環境の準備をします。 といっても以下のコマンド一発です。

$ cd $(go env GOROOT) # go をインストールしたディレクトリに移動
$ cd src              # その下の src
$ GOOS=windows GOARCH=amd64 ./make.bash

あとはリポジトリ上で、以下のようにOSを指定してビルドを実行します。

$ GOOS=windows GOARCH=amd64 go build

上側がMac版バイナリでexeがwindowsです。 ずいぶん大きさが違いますね。

$ ls
-rwxr-xr-x   1 masahide  staff  4106960 12 14 15:47 test-winservice
-rwxr-xr-x   1 masahide  staff  2509824 12 14 16:39 test-winservice.exe

実行方法

exampleのまま作成すると以下のようにコマンドでサービスの登録や実行などが行えます。

サービス登録
C:\Users\Masahide\Desktop>test-winservice.exe install
Service "Go Service Test" installed.
サービス開始
C:\Users\Masahide\Desktop>test-winservice.exe start
Service "Go Service Test" started.
サービス停止
C:\Users\Masahide\Desktop>test-winservice.exe stop
Service "Go Service Test" stopped.
サービス削除
C:\Users\Masahide\Desktop>test-winservice.exe remove
Service "Go Service Test" removed.

その他

  • 標準出力などの出力はどうなるの?
    • -> イベントログのアプリケーションログとして出力されます。
    • -> service.Logger を使いましょう。 イベントログのアプリケーションログに出力してくれます。
45
43
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
45
43