diff --git a/README.md b/README.md index bd99610..6306479 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,7 @@ Usage: Available Commands: cron Run as cron job run Run douyu job manually + service Manage service Flags: -c, --config string path to config file @@ -97,9 +98,19 @@ douyu-task run gift send ### Run Cron ```shell +douyu-task douyu-task cron ``` +### Service + +```shell +# register as system service +douyu-task service --user --config douyu-task.yaml install +douyu-task service start +douyu-task service status +``` + ## Docker Compose ```yaml diff --git a/cmd/cron.go b/cmd/cron.go index 8c8624b..71497da 100644 --- a/cmd/cron.go +++ b/cmd/cron.go @@ -18,16 +18,7 @@ var cronCmd = cobra.NewCommand(func(c *cobra.Command) { c.Use = "cron" c.Short = "Run as cron job" c.RunE = func(cmd *cobra.Command, args []string) error { - err1 := cron.AddJob(config.C().Cron.Refresh, "douyu-cron-refresh", cronRefresh) - if err1 != nil { - return fmt.Errorf("add cron job error: %w", err1) - } - err2 := cron.AddJob(config.C().Cron.Renewal, "douyu-cron-renewal", cronRenewal) - if err2 != nil { - return fmt.Errorf("add cron job error: %w", err2) - } - cron.Run() - return nil + return cronRun() } }) @@ -35,6 +26,19 @@ func init() { rootCmd.AddCommand(cronCmd) } +func cronRun() error { + err1 := cron.AddJob(config.C().Cron.Refresh, "douyu-cron-refresh", cronRefresh) + if err1 != nil { + return fmt.Errorf("add cron job error: %w", err1) + } + err2 := cron.AddJob(config.C().Cron.Renewal, "douyu-cron-renewal", cronRenewal) + if err2 != nil { + return fmt.Errorf("add cron job error: %w", err2) + } + cron.Run() + return nil +} + func cronRefresh() { msg := "斗鱼每日刷新礼物" err := job.Refresh() diff --git a/cmd/service.go b/cmd/service.go new file mode 100644 index 0000000..bc468ed --- /dev/null +++ b/cmd/service.go @@ -0,0 +1,21 @@ +package main + +import ( + "context" + + "github.com/starudream/go-lib/core/v2/config" + "github.com/starudream/go-lib/core/v2/utils/osutil" + "github.com/starudream/go-lib/service/v2" +) + +func init() { + args := []string{"cron"} + if c := config.LoadedFile(); c != "" { + args = append(args, "-c", c) + } + service.AddCommand(rootCmd, service.New("douyu-task", serviceCron, service.WithArguments(args...))) +} + +func serviceCron(context.Context) { + osutil.ExitErr(cronRun()) +} diff --git a/go.mod b/go.mod index 7641108..e998028 100644 --- a/go.mod +++ b/go.mod @@ -3,11 +3,12 @@ module github.com/starudream/douyu-task go 1.21 require ( - github.com/starudream/go-lib/cobra/v2 v2.0.1 - github.com/starudream/go-lib/core/v2 v2.0.5 - github.com/starudream/go-lib/cron/v2 v2.0.1 - github.com/starudream/go-lib/ntfy/v2 v2.0.4 - github.com/starudream/go-lib/resty/v2 v2.0.3 + github.com/starudream/go-lib/cobra/v2 v2.0.2 + github.com/starudream/go-lib/core/v2 v2.0.8 + github.com/starudream/go-lib/cron/v2 v2.0.2 + github.com/starudream/go-lib/ntfy/v2 v2.0.5 + github.com/starudream/go-lib/resty/v2 v2.0.4 + github.com/starudream/go-lib/service/v2 v2.0.0 github.com/starudream/go-lib/tablew/v2 v2.0.3 ) @@ -24,6 +25,7 @@ require ( github.com/goccy/go-json v0.10.2 // indirect github.com/goccy/go-yaml v1.11.2 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/kardianos/service v1.2.2 // indirect github.com/knadh/koanf/maps v0.1.1 // indirect github.com/knadh/koanf/v2 v2.0.1 // indirect github.com/kr/pretty v0.3.1 // indirect diff --git a/go.sum b/go.sum index 96d4bc7..99dc8f4 100644 --- a/go.sum +++ b/go.sum @@ -26,6 +26,8 @@ github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/ github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/kardianos/service v1.2.2 h1:ZvePhAHfvo0A7Mftk/tEzqEZ7Q4lgnR8sGz4xu1YX60= +github.com/kardianos/service v1.2.2/go.mod h1:CIMRFEJVL+0DS1a3Nx06NaMn4Dz63Ng6O7dl0qH0zVM= github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NIs= github.com/knadh/koanf/maps v0.1.1/go.mod h1:npD/QZY3V6ghQDdcQzl1W4ICNVTkohC8E73eI2xW4yI= github.com/knadh/koanf/v2 v2.0.1 h1:1dYGITt1I23x8cfx8ZnldtezdyaZtfAuRtIFOiRzK7g= @@ -69,16 +71,18 @@ github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/starudream/go-lib/cobra/v2 v2.0.1 h1:9J2oWgqON9/JeLOypv6dD6TXeEelkpvCKG60jHPdg3E= -github.com/starudream/go-lib/cobra/v2 v2.0.1/go.mod h1:v1B/Yo6GA/Oe5g+OW3gTfewXa9JORUEfnPd1RHflUEI= -github.com/starudream/go-lib/core/v2 v2.0.5 h1:7HevB6/y3pN5xHbAuYQbIpTBWL34FRBnfDiLeqCRR4U= -github.com/starudream/go-lib/core/v2 v2.0.5/go.mod h1:jCaVxSBgRwvYNAe9Wf0smZLZwRLNxtHywgrxTb5eTCM= -github.com/starudream/go-lib/cron/v2 v2.0.1 h1:v/OGyRFwNHFoUOsJXI0Pn4lbdztB89agZaGJzxkrvW0= -github.com/starudream/go-lib/cron/v2 v2.0.1/go.mod h1:XysGo8YkrVvg5MGbDOuVgWmiJjt93gCHCDMeT0sn50k= -github.com/starudream/go-lib/ntfy/v2 v2.0.4 h1:Z56rIFg8QT+X+j3xqLliAUqF8d2IKWUXoWcBZ0vUDfM= -github.com/starudream/go-lib/ntfy/v2 v2.0.4/go.mod h1:QmkjPMYHFLzxeh6zjGWn2J+dTFJK0KTCXk+uzKrTBuI= -github.com/starudream/go-lib/resty/v2 v2.0.3 h1:RG3ijLtVe4lf+kp4twfF3DudAq9YG93A4Ore0QW7AtM= -github.com/starudream/go-lib/resty/v2 v2.0.3/go.mod h1:vZsbF8d0syHRmJvAc03x56PysF+YNnAqbzVDp7M5VTI= +github.com/starudream/go-lib/cobra/v2 v2.0.2 h1:mCGDpFNhmNc54IXYJvEVCwJ1wX+CvBo9mccgEoKlh10= +github.com/starudream/go-lib/cobra/v2 v2.0.2/go.mod h1:x0DNeqD6YlkfsP77HKkgsop7GkCTn6Zalvg3SmohPy8= +github.com/starudream/go-lib/core/v2 v2.0.8 h1:qpy+hskvf5mnLBAGNKbrApHv0bryMkU5kzhT+eMtmB8= +github.com/starudream/go-lib/core/v2 v2.0.8/go.mod h1:AKAzYYupFlZH3jE5VZCjYjgfeH1lk5sVNR7GrMFVd6U= +github.com/starudream/go-lib/cron/v2 v2.0.2 h1:FMwmcGUhC4IAHLju8wE1CZuRqyFTCyl1Nli1lHZPtPI= +github.com/starudream/go-lib/cron/v2 v2.0.2/go.mod h1:Phh5DBdVVjPfRTBs7ze1O4yJOxwEmESgVWmF+6HDk3E= +github.com/starudream/go-lib/ntfy/v2 v2.0.5 h1:ANUDeqmGsGnjEZmb73eeiyPsKLW5BDzbWUBvM36ZQr0= +github.com/starudream/go-lib/ntfy/v2 v2.0.5/go.mod h1:so5wrb5qvPiZixUijqlt8bIULif2V0ocNHp+La9C9UU= +github.com/starudream/go-lib/resty/v2 v2.0.4 h1:a4/M9LU6TQv4xBN9L6Ge3KzwOqXHgWVN077PgrRIDes= +github.com/starudream/go-lib/resty/v2 v2.0.4/go.mod h1:aYcVa8W4BUY7qvS94C0gYwATfYf0Z1HXnWy3zNXDea8= +github.com/starudream/go-lib/service/v2 v2.0.0 h1:4HUx1N/alaLRQU7qMoIgQIO2+v4jOBtIvQV9/Yg9TDM= +github.com/starudream/go-lib/service/v2 v2.0.0/go.mod h1:32fHQFCD+ol87td54v2Y2TQbMqFSNSkro70NQ1VHuto= github.com/starudream/go-lib/tablew/v2 v2.0.3 h1:ACy8ASOVeog1qQb57iUffgSLeF8Ebb/Ju0aymOY4TFA= github.com/starudream/go-lib/tablew/v2 v2.0.3/go.mod h1:VvFzxm4mx6fxUf+JgVSqED7igWU+afpwm5gMMqsvoFg= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= @@ -103,6 +107,7 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=