debian unitfile execStart 二进制错误但手动可以工作

debian unitfile execStart 二进制错误但手动可以工作

我正在尝试将 go 二进制文件作为systemd服务运行。我有其他具有相同配置的文件,它们运行良好。但我不知道我是否错过了什么。这是我的单元文件:

[Unit]
Description=my service app
[Install]
WantedBy=multi-user.target

[Service]
Type=simple
ExecStart=/root/go/myservice/bin/binary
Environment="ENV=prod"
# I have more environment variables which I've commented to test If this was the problem but isn't


Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
SyslogIdentifier=%n

systemctl daemon-reload我对单元文件所做的每次更改之后也都进行了运行,但行为相同。

journalctl -xefu这是我在 systemd 服务上运行时的输出结果

Feb 21 08:55:06 myhost.com myunitfile.service[1641023]: 2023/02/21 08:55:06 exec.Command: exit status 128
Feb 21 08:55:06 myhost.com systemd[1]: myunitfile.service: Main process exited, code=exited, status=1/FAILURE
░░ Subject: Unit process exited
░░ Defined-By: systemd
░░ Support: https://www.debian.org/support
░░ 
░░ An ExecStart= process belonging to unit myunitfile.service has exited.
░░ 
░░ The process' exit code is 'exited' and its exit status is 1.

然后当我手动运行它时:/root/go/myservice/bin/executable

 # /root/go/myservice/bin/executable
09:00:31.041705 server is up

编辑 2023-02-21 21:42

我最近尝试了一些事情:

我进入了存储单元文件cd的目录/etc/systemd/system。然后我尝试通过绝对路径运行二进制文件,但出现了同样的错误exec.Command: exit status 128

可能是某些权限错误?我不确定如何检查。希望得到帮助 :)

编辑 2023-02-22 15:23

我忘了说我正在部署一个使用 的 go 应用程序gRPC。我认为这可能是问题所在。我有其他使用go build命令构建的 go 应用程序,它们运行良好,没有任何问题。

答案1

作为一个临时补丁,我决定创建一个非常简单的 bash 脚本:

#!/bin/bash
cd /root/go/myservice
./bin/binary

我的单元文件现在如下所示:

[Unit]
Description=my service app
[Install]
WantedBy=multi-user.target

[Service]
Type=simple
ExecStart=/root/go/myservice/bin/binary
Environment="ENV=prod"


Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
SyslogIdentifier=%n

相关内容