您的位置:首页 > 运维架构 > Linux

Go程序在Linux作为后台应用daemon运行

2016-05-29 16:57 465 查看
之前用过很多方式,包括

&

nohup

模拟fork

用centos 7之后,发现最好的办法是作为systemd的service,Type为notify方式

一个简单的示例

service单元文件编写

[Unit]
Description=ewar gate server
After=network.target

[Service]
Type=notify
PIDFile=/usr/local/ewar/run/chat.pid
ExecStartPre=/bin/rm -f /usr/local/ewar/run/chat.pid
ExecStart=/usr/local/ewar/bin/chat -c /usr/local/ewar/etc/chat.ini --pidfile=/usr/local/ewar/run/chat.pid --log_dir=/usr/local/ewar/log
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID


Go程序

socketAddr := &net.UnixAddr{
Name: os.Getenv("NOTIFY_SOCKET"),
Net:  "unixgram",
}

if socketAddr.Name == "" {
return SdNotifyNoSocket
}

conn, err := net.DialUnix(socketAddr.Net, nil, socketAddr)
if err != nil {
return err
}
defer conn.Close()

_, err = conn.Write([]byte("READY=1"))


启动完成后向systemd汇报,完成启动

之后就能用systemd管理start stop restart等等
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: