当我使用 systemd 时,我的 golang web 应用程序无法启动,但手动启动时它可以正常工作。我的 systemd 配置有什么问题?
goweb.service
$ cat goweb.service
[Unit]
Description=Backend service
After=network.target
[Service]
User=myapp
Group=myapp
Restart=on-failure
ExecStart=/u01/backend
[Install]
WantedBy=multi-user.target
backend
是一个用命令编译的二进制文件:env GOOS=linux GOARCH=amd64 go build -v bitbucket.org/myapp/backend
systemd 服务状态
$ sudo service goweb status
Redirecting to /bin/systemctl status goweb.service
● goweb.service - Backend service
Loaded: loaded (/usr/lib/systemd/system/goweb.service; disabled; vendor preset: disabled)
Active: inactive (dead)
May 18 10:55:56 instance-1 systemd[1]: Started Backend service.
May 18 10:55:56 instance-1 systemd[1]: Starting Backend service...
P/S :看起来我的网络应用程序启动了,但随后立即停止。
我尝试配置
Type=forking
,然后服务状态显示如下。有人可以解释为什么日志 Started Backend service.
和 Starting Backend service...
顺序相反。$ sudo service goweb status
Redirecting to /bin/systemctl status goweb.service
● goweb.service - Backend service
Loaded: loaded (/usr/lib/systemd/system/goweb.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Wed 2016-05-18 11:06:02 UTC; 2s ago
Process: 25847 ExecStart=/u01/backend (code=exited, status=0/SUCCESS)
May 18 11:06:02 instance-1 systemd[1]: Starting Backend service...
May 18 11:06:02 instance-1 systemd[1]: Started Backend service.
手动运行 Web 应用程序时的结果(从终端):
$ /u01/backend
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
[GIN-debug] POST /upload --> main.uploadFileHandler (3 handlers)
[GIN-debug] Environment variable PORT="9005"
[GIN-debug] Listening and serving HTTP on :9005
更新 :
systemd
,我将服务配置更改为 Restart=always
、 RestartSec=15
。 systemd
不断重启我的网络应用程序。 有谁知道为什么
supervisord
可以正常工作但 systemd
不行?我认为 systemd
可以很好地处理这样的基本任务! 最佳答案
我会大胆尝试并猜测您的应用程序在端口 80 和/或 443 上监听,因此您最好的选择是对其使用 setcap 以授予它权限。
例如: sudo setcap 'cap_net_bind_service=+ep' /u01/backend
,每次编译应用程序时都需要这样做。
关于go - 为什么 systemd 无法启动 golang web 应用程序,没有答案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37297714/