diff --git a/cmd/root.go b/cmd/root.go index 6aa7d6d8..c1d7cccb 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -87,6 +87,7 @@ func init() { rootCommand.AddCommand(versionCommand) rootCommand.AddCommand(configureCmd) + rootCommand.AddCommand(serviceCmd) rootCommand.AddCommand(newDiagnosticsCommand()) } diff --git a/cmd/service_install.go b/cmd/service_install.go new file mode 100644 index 00000000..c16e5835 --- /dev/null +++ b/cmd/service_install.go @@ -0,0 +1,79 @@ +package cmd + +import ( + "fmt" + "os" + "os/exec" + + "github.com/apex/log" + "github.com/spf13/cobra" +) + +var ( + serviceFile = "/etc/systemd/system/wings.service" + serviceContent = `[Unit] +Description=Pterodactyl Wings Daemon +After=docker.service +Requires=docker.service +PartOf=docker.service + +[Service] +User=root +WorkingDirectory=/etc/pterodactyl +LimitNOFILE=4096 +PIDFile=/var/run/wings/daemon.pid +ExecStart=/usr/local/bin/wings +Restart=on-failure +StartLimitInterval=180 +StartLimitBurst=30 +RestartSec=5s + +[Install] +WantedBy=multi-user.target` + serviceCmd = &cobra.Command{ + Use: "service-install", + Short: "Use to install wings.service automatically", + Run: installService, + } +) + +func installService(cmd *cobra.Command, args []string) { + if _, err := os.Stat(serviceFile); err == nil { + log.WithField("error", "service file exists").Fatal("service aready installed") + return + } + + f, cf_err := os.Create(serviceFile) + + if cf_err != nil { + log.WithField("error", cf_err).Fatal("error while creating service file") + return + } + + content := []byte(serviceContent) + + _, wf_err := f.Write(content) + + if wf_err != nil { + log.WithField("error", wf_err).Fatal("error while write service file") + return + } + + enable_command := exec.Command("systemctl", "enable", "--now", serviceFile) + cmd_enable_err := enable_command.Start() + + if cmd_enable_err != nil { + log.WithField("error", cmd_enable_err).Fatal("error while enabling service") + return + } + + daemon_reload_command := exec.Command("systemctl", "daemon-reload") + cmd_reload_err := daemon_reload_command.Start() + + if cmd_reload_err != nil { + log.WithField("error", cmd_reload_err).Fatal("error while reloading daemon") + return + } + + fmt.Println("service created success!") +}