服务程序后台运行

使用 systemd 系统服务来实现开机自启,更符合 Linux 系统服务管理的最佳实践

以我的一个Golang服务为例,创建一个新的服务文件。

1
>touch /etc/systemd/system/beegoblog.service

文件内容

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=Beego Application
After=network.target //服务在 network.target 之后启动

[Service]
//可执行文件路径,不是main.go
ExecStart=/path/to/your/beego_app/your_beego_executable
WorkingDirectory=/path/to/your/beego_app //应用的工作目录
Restart=on-failure //服务在失败时自动重启
User=your_user_name //指定运行服务的用户,最好不要是root,存在安全风险

[Install]
WantedBy=multi-user.target

User 设置为 root 存在安全风险。一般不建议以 root 用户运行应用程序,因为 root 用户拥有系统的最高权限,如果应用程序出现安全漏洞,可能会导致整个系统受到威胁。最好创建一个专门的普通用户来运行 Beego 应用。

生成可执行文件:

1
2
>cd /var/www/go/src/BeegoBlog/AllSrcCode/
>go build -o /var/www/go/src/BeegoBlog/AllSrcCode/bin/beegoblogapp

当代码更新后,重新执行 go build 命令会自动覆盖旧的可执行文件,无需手动删除。

1
>go clean //清理项目中的构建缓存和旧的构建产物

再次执行 go build 命令,这样可以确保生成的可执行文件完全基于最新的代码。

1
>go build -o /var/www/go/src/BeegoBlog/AllSrcCode/bin/beegoblogapp

使 systemd 配置生效

1
2
3
4
5
6
7
8
9
10
11
>sudo systemctl daemon-reload
#设置开机自启:
>sudo systemctl enable beegoblog.service
#启动服务:
>sudo systemctl start beegoblog.service
#检查服务状态:
>sudo systemctl status beegoblog.service
#停止服务:
>sudo systemctl stop beegoblog.service
#关闭开机自启,从开机自启服务列表中移除
>sudo systemctl disable beegoblog.service