代码拉取完成,页面将自动刷新
package model
import (
"fmt"
"gitee.com/liumou_site/gcs"
"gitee.com/liumou_site/gf"
"gitee.com/liumou_site/logger"
"runtime"
)
// CreateService 用于在Linux系统上创建并启动ddns-go服务。
// 该函数会检查当前系统是否为Linux,并确保配置文件和目标服务文件不存在。
// 然后,它会创建必要的目录,复制配置文件,并生成systemd服务文件。
// 最后,函数会重载systemd配置,启用并启动ddns-go服务。
//
// 参数:
// - conf: 配置文件的路径,该文件将被复制到/etc/ddns-go/config.toml。
//
// 返回值:
// - error: 如果过程中出现任何错误,返回相应的错误信息;否则返回nil。
func CreateService(conf string) error {
file := "/usr/lib/systemd/system/ddns-go.service"
run := gcs.NewShell()
// 检查当前系统是否为Linux,如果不是则返回错误
if runtime.GOOS != "linux" {
return fmt.Errorf("当前系统不是Linux系统,无法创建服务")
}
// 判断当前系统是否可以使用 systemctl
if !gf.Exists("/usr/bin/systemctl") {
return fmt.Errorf("当前系统不支持systemctl,无法创建服务")
}
// 检查配置文件是否存在,如果不存在则返回错误
if !gf.Exists(conf) {
return fmt.Errorf("配置文件不存在")
}
// 检查ddns-go服务是否已存在,如果存在则返回错误
if gf.Exists(file) {
return fmt.Errorf("ddns-go服务已存在")
}
// 创建ddns-go配置目录
run.RunShell("mkdir -p /etc/ddns-go")
if run.Err != nil {
logger.Error("创建ddns-go配置目录失败")
return run.Err
}
// 复制配置文件到指定位置
run.RunShell("cp -rf", conf, " /etc/ddns-go/config.toml")
if run.Err != nil {
logger.Error("复制配置文件失败")
return run.Err
}
// 定义systemd服务文件内容
text := `[Unit]
Description=ddns-go
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/ddns-go -c /etc/ddns-go/config.toml
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Alias=ddns-go.service
`
// 将服务文件内容写入指定路径
w := gf.NewFile(file)
w.Echo(text)
if w.Err != nil {
logger.Error("写入ddns-go服务失败: ", file)
logger.Debug(w.Err)
return w.Err
}
// 重载systemd配置
run.RunShell("systemctl daemon-reload")
if run.Err != nil {
logger.Error("重载ddns-go服务失败")
logger.Debug(run.Err)
return run.Err
}
// 禁用并重新启用ddns-go服务,然后启动服务
run.RunShell("systemctl disable ddns-go.service")
run.RunShell("systemctl enable ddns-go.service")
run.RunShell("systemctl start ddns-go.service")
if run.Err != nil {
logger.Error("启动ddns-go服务失败")
logger.Debug(run.Err)
return run.Err
}
logger.Info("ddns-go服务创建成功并已设置为开机自启")
logger.Info("配置文件路径: /etc/ddns-go/config.toml")
logger.Info("ddns-go服务路径: /usr/lib/systemd/system/ddns-go.service")
logger.Info("启动命令: systemctl start ddns-go.service")
return nil
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。