http://blog.csdn.net/yang8023tao/article/details/53332984
这个服务 我随便写了个 测试 貌似启动服务 并不执行里面的代码、、
结果服务启动后, 并没有执行生成文件写入文件操作 请问我写错了? 还是这个包 版本太老了
~~~
package main
import (
"os"
"io"
"github.com/jander/golog/logger"
"github.com/kardianos/service"
)
type program struct{}
var wireteString = "测试n"
var filename = "./123.txt" //./123.txt
var f *os.File
var err1 error
func check(e error) {
if e != nil {
panic(e)
}
}
/**
* 判断文件是否存在 存在返回 true 不存在返回false
*/
func checkFileIsExist(filename string) bool {
var exist = true
if _, err := os.Stat(filename); os.IsNotExist(err) {
exist = false
}
return exist
}
func (p *program) Start(s service.Service) error {
go p.run()
return nil
}
func (p *program) run() {
// 代码写在这儿
if checkFileIsExist(filename) {
f, err1 = os.OpenFile(filename, os.O_APPEND, 0666) //打开文件
//fmt.Println("文件存在")
} else {
f, err1 = os.Create(filename) //创建文件
}
check(err1)
_, err1 := io.WriteString(f, wireteString) //写入文件(字符串)
check(err1)
// fmt.Printf("写入 %d 个字节n", n)
}
func (p *program) Stop(s service.Service) error {
return nil
}
/**
* MAIN函数,程序入口
*/
func main() {
svcConfig := &service.Config{
Name: "IMService", //服务显示名称
DisplayName: "IMService", //服务名称
Description: "Service", //服务描述
}
prg := &program{}
s, err := service.New(prg, svcConfig)
if err != nil {
logger.Fatal(err)
}
if err != nil {
logger.Fatal(err)
}
if len(os.Args) > 1 {
if os.Args[1] == "install" {
s.Install()
logger.Println("服务安装成功")
return
}
if os.Args[1] == "remove" {
s.Uninstall()
logger.Println("服务卸载成功")
return
}
}
err = s.Run()
if err != nil {
logger.Error(err)
}
}
~~~
```
func (p *program) Start(s service.Service) error {
go p.run()
return nil
}
改成
func (p *program) Start(s service.Service) error {
p.service = s
go p.run()
return nil
}
```
#1
更多评论
<a href="/user/victorl" title="@victorl">@victorl</a> 问下 p.service 没有这个service函数啊
#2
我这样写是可以的
```go
package main
import (
"flag"
"log"
"os"
"github.com/kardianos/service"
)
type program struct {
service service.Service
}
func (p *program) Start(s service.Service) error {
p.service = s
go p.run()
return nil
}
func (p *program) run() {
defer func() {
if service.Interactive() {
p.Stop(p.service)
} else {
p.service.Stop()
}
}()
// to do ...
}
func (p *program) Stop(s service.Service) error {
if service.Interactive() {
os.Exit(0)
}
return nil
}
func main() {
flag.Parse()
svcConfig := &service.Config{
Name: "***", //服务显示名称
DisplayName: "***", //服务名称
Description: "***", //服务描述
}
prg := &program{}
s, err := service.New(prg, svcConfig)
if err != nil {
log.Fatalln(err)
}
if len(os.Args) > 1 {
if flag.Arg(0) == "install" {
err := s.Install()
if err != nil {
log.Println("服务安装失败")
return
}
log.Println("服务安装成功")
return
}
if flag.Arg(0) == "uninstall" {
err := s.Uninstall()
if err != nil {
log.Println("服务卸载失败")
return
}
log.Println("服务卸载成功")
return
}
}
err = s.Run()
if err != nil {
log.Println(err)
}
}
```
#3