Script de pagina web vs Systemd

Iniciado por chewychewy, 15 de Março de 2020, 12:36

tópico anterior - próximo tópico

chewychewy

Olá senhoras e senhores da tela preta,
Preciso de ajuda com uma coisa que comecei só pela curiosidade e agora to meio encucado rsrs (a duvida começa a partir do passo 4, o restante é apenas para introduzir o que fiz).
1 - Primeiramente criei uma pasta pra colocar meu ambiente GO, mkdir /goserver.
2 - Fiz um script (nano /goserver/main.go) bem simples em GO para imprimir uma frase numa pagina web no navegador:

package main

import (
  "net/http"
  "github.com/labstack/echo/v4"
)

func main () {
  e := echo.New()
  e.GET("/", catatau)
  e.Logger.Fatal(e.Start(":1533"))
}

func catatau (c echo.Context) error {
  return c.String(http.StatusOK, "sopa nao e janta")
}


3 - Usei o comando
go mod init server
3.1 - e depois
go run main.go & 

A partir daqui eu já consigo acessar e visualisar "sopa nao e janta" pelo navegador com o script rodando em background.

4 - O que eu preciso é torna-lo um serviço e faze-lo rodar na inicialização do linux.
Eu sei que preciso colocar o arquivo .service em lib/systemd/system/<serviço>.service
Mas eu acredito que também preciso de um arquivo .sh para dizer o que o .service fará em durante o start | stop | restart | enable.

Obs: Estou no arch linux.
Agradeço a todos,

chewychewy

#1
Tentei! Mas não deu  >:( >:(

Primeiro pensei em fazer o script goserver.sh pra depois apontar o goserver.service pra ele:

[root@archlinux goserver]# which go
/usr/bin/go
[root@archlinux goserver]# cat goserver.sh
#!/bin/bash

start() {
  exec /usr/bin/go run main.go &
}

stop() {
  pkill -9 go
}

restart() {
  stop
  start
}

case $1 in
  start|stop|restart) "$1" ;;
esac

Posteriormente, pensei em como fazer o goserver.service pra poder dar um systemctl enable goserver e ativar sua execução sempre que o linux iniciar:

[root@archlinux goserver]# cat /lib/systemd/system/goserver.service
[Unit]

[Service]
Type=forking
TimeoutStartSec=30
TimeoutStopSec=30
ExecStart=/goserver/goserver.sh start
ExecStop=/goserver/goserver.sh stop
ExecReload=/goserver/goserver.sh restart
Restart=on-failure

[Install]
WantedBy=multi-user.target


mas sai isso aqui do status:

[root@archlinux goserver]# systemctl start goserver
[root@archlinux goserver]# systemctl enable goserver
[root@archlinux goserver]# systemctl status goserver
● goserver.service
     Loaded: loaded (/usr/lib/systemd/system/goserver.service; enabled; vendor preset: disabled)
     Active: failed (Result: exit-code) since Sun 2020-03-15 12:45:24 -03; 14s ago
    Process: 2772 ExecStart=/goserver/goserver.sh start (code=exited, status=0/SUCCESS)
   Main PID: 2773 (code=exited, status=1/FAILURE)

mar 15 12:45:24 archlinux systemd[1]: goserver.service: Main process exited, code=exited, status=1/FAILURE
mar 15 12:45:24 archlinux systemd[1]: goserver.service: Failed with result 'exit-code'.
mar 15 12:45:24 archlinux systemd[1]: goserver.service: Scheduled restart job, restart counter is at 5.
mar 15 12:45:24 archlinux systemd[1]: Stopped goserver.service.
mar 15 12:45:24 archlinux systemd[1]: goserver.service: Start request repeated too quickly.
mar 15 12:45:24 archlinux systemd[1]: goserver.service: Failed with result 'exit-code'.
mar 15 12:45:24 archlinux systemd[1]: Failed to start goserver.service.


FaBMak

O caminho é esse mesmo. Tópico trancado, pois vc usa Arch. Cada escolha, tem sua consequências.
"Não creias impossível o que apenas improvável parece". (Shakespeare)
fabmak://website