5 changed files with 63 additions and 0 deletions
@ -0,0 +1,3 @@ |
|||||
|
module scagnet |
||||
|
|
||||
|
go 1.22.1 |
||||
@ -0,0 +1 @@ |
|||||
|
package log |
||||
@ -0,0 +1,55 @@ |
|||||
|
package main |
||||
|
|
||||
|
import ( |
||||
|
"fmt" |
||||
|
"os" |
||||
|
"os/signal" |
||||
|
"syscall" |
||||
|
) |
||||
|
|
||||
|
// 输入-d 参数,以守护进程方式运行
|
||||
|
func isDaemon() bool { |
||||
|
for _, arg := range os.Args { |
||||
|
if arg == "-d" { |
||||
|
fmt.Println("以守护进程方式运行") |
||||
|
return true |
||||
|
} |
||||
|
} |
||||
|
fmt.Println("以非守护进程方式运行") |
||||
|
return false |
||||
|
} |
||||
|
|
||||
|
// 优雅退出(退出信号)
|
||||
|
func waitElegantExit(signalChan chan os.Signal) { |
||||
|
for i := range signalChan { |
||||
|
switch i { |
||||
|
case syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT: |
||||
|
// 这里做一些清理操作或者输出相关说明,比如 断开数据库连接
|
||||
|
fmt.Println("receive exit signal ", i.String(), ",exit...") |
||||
|
os.Exit(0) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
func main() { |
||||
|
fmt.Println("JSON RPC服务端") |
||||
|
// 检查是否以守护进程方式运行
|
||||
|
if isDaemon() { |
||||
|
// 以守护进程方式运行
|
||||
|
} |
||||
|
// 优雅退出
|
||||
|
// quit := make(chan os.Signal)
|
||||
|
// signal.Notify(quit, os.Interrupt, os.Kill)
|
||||
|
// v := <-quit
|
||||
|
// fmt.Println("退出信号:", v)
|
||||
|
|
||||
|
c := make(chan os.Signal) |
||||
|
// SIGHUP: terminal closed
|
||||
|
// SIGINT: Ctrl+C
|
||||
|
// SIGTERM: program exit
|
||||
|
// SIGQUIT: Ctrl+/
|
||||
|
signal.Notify(c, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT) |
||||
|
|
||||
|
// 阻塞,直到接受到退出信号,才停止进程
|
||||
|
waitElegantExit(c) |
||||
|
} |
||||
@ -0,0 +1,3 @@ |
|||||
|
## 说明 |
||||
|
|
||||
|
封装后的程序运行在linux服务器,客户端通过json_rpc方式访问。 |
||||
Loading…
Reference in new issue