Golang Go语言中 systemctl 管理进程问题
Golang Go语言中 systemctl 管理进程问题
初学 go,在部署的时候遇到了点问题,请大佬看下
参考 这篇文章 ,在/usr/lib/systemd/system
在文件夹下创建wombatapp.service
文件并写入内容,然后执行service wombatapp start
报错如下:
Failed to start wombatapp.service: The name org.freedesktop.PolicyKit1 was not provided by any .service files
See system logs and 'systemctl status wombatapp.service' for details
执行 systemctl status wombatapp.service
结果
● wombatapp.service - wombatapp
Loaded: loaded (/usr/lib/systemd/system/wombatapp.service; disabled; vendor preset: disabled)
Active: inactive (dead)
wombatapp.service 文件内容:
[Unit]
Description=wombatapp
[Service]
Type=simple
Restart=always
RestartSec=5s
ExecStart=/home/ec2-user/wombatapp
[Install]
WantedBy=multi-user.target
单独执行 wombatapp 文件是能成功运行的,
另外尝试了下用supervior
来管理到是很轻松,没遇到任何问题直接成功了
更多关于Golang Go语言中 systemctl 管理进程问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
看了下配置没问题
sudo apt install policykit-1 ?
https://askubuntu.com/questions/1113470/org-freedesktop-policykit1-was-not-provided-by-any-service-files
更多关于Golang Go语言中 systemctl 管理进程问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
直接后台运行呗。
感谢回复。 发现是权限问题…… sudo 就好了😂
用个管理工具,万一程序因为某些原因挂了它能重启
Type 有很多种的,可以换其他的如 forking, notify 试试效果
在Golang中,使用systemctl
来管理服务进程通常涉及与systemd系统的交互。systemd是Linux上广泛使用的系统和服务管理器,而systemctl
是控制systemd服务的命令行工具。虽然Go语言本身不直接提供与systemctl
交互的API,但你可以通过执行外部命令来实现这一点。
要在Go中调用systemctl
,你可以使用os/exec
包来执行shell命令。例如,要启动一个名为myservice
的服务,你可以这样做:
package main
import (
"fmt"
"os/exec"
)
func main() {
cmd := exec.Command("systemctl", "start", "myservice")
err := cmd.Run()
if err != nil {
fmt.Println("Error starting service:", err)
} else {
fmt.Println("Service started successfully")
}
}
类似地,你可以使用systemctl stop
, systemctl status
, systemctl enable
等命令来控制服务。
需要注意的是,执行这些命令通常需要管理员权限,因此在生产环境中,你可能需要确保你的Go程序有足够的权限来调用systemctl
。此外,对于错误处理,建议检查cmd.Wait()
的返回值以及cmd.Stderr
的输出,以获得更详细的错误信息。
总之,虽然Go语言不直接提供与systemd交互的库,但通过os/exec
包执行shell命令是一个简单而有效的方法来实现对systemd服务的管理。