Skip to content

Commit 3568e9c

Browse files
committed
Aggiungo cli.go (comandi di start e shutdown, con apertura del server su una finestra di terminale a parte), aggiornamento README, bugfixes
1 parent c0d2554 commit 3568e9c

3 files changed

Lines changed: 133 additions & 1 deletion

File tree

README.md

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
# BlogEngine
23

34
BlogEngine è un motore di blog scritto in Go, con un frontend semplice in HTML/CSS.
@@ -60,4 +61,37 @@ Clona il progetto, installa le dipendenze e avvia il server:
6061
git clone https://github.com/CodingDiego150104/BlogEngine.git
6162
cd BlogEngine
6263
go mod tidy # per scaricare tutte le dipendenze
63-
go run main.go # per avviare il server
64+
```
65+
66+
### Avviare, spegnere e riavviare il server con `blogctl`
67+
68+
Nel progetto è incluso un comando a riga di comando chiamato `blogctl`, che ti permette di gestire facilmente il server.
69+
70+
1. **Avviare il server**:
71+
```bash
72+
blogctl start
73+
```
74+
75+
2. **Spegnere il server**:
76+
```bash
77+
blogctl shutdown
78+
```
79+
80+
3. **Riavviare il server**:
81+
```bash
82+
blogctl restart
83+
```
84+
85+
Il comando `blogctl start` avvia il server in una nuova finestra del terminale su **Windows** e in background su **Linux/macOS**, mentre `shutdown` e `restart` fermano il server in esecuzione.
86+
87+
---
88+
89+
## 🐞 Risoluzione dei problemi
90+
91+
Se il comando `blogctl` non funziona correttamente, assicurati di avere Go installato correttamente, e che il file `cli.go` sia stato compilato come eseguibile. Se non è stato compilato, puoi farlo con:
92+
93+
```bash
94+
go build cli.go
95+
```
96+
97+
Il comando `blogctl` sarà quindi disponibile come eseguibile nel tuo terminale.

blogctl.exe

2.59 MB
Binary file not shown.

cli.go

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"log"
6+
"os"
7+
"os/exec"
8+
"runtime"
9+
"time"
10+
)
11+
12+
func main() {
13+
if len(os.Args) < 2 {
14+
fmt.Println("Usa: blogctl [start|shutdown|restart]")
15+
return
16+
}
17+
18+
switch os.Args[1] {
19+
case "start":
20+
runGoModTidyIfNeeded()
21+
startServer()
22+
case "shutdown":
23+
shutdownServer()
24+
case "restart":
25+
shutdownServer()
26+
time.Sleep(2 * time.Second) // Pausa tra stop e start
27+
runGoModTidyIfNeeded()
28+
startServer()
29+
default:
30+
fmt.Println("Comando non valido.")
31+
}
32+
}
33+
34+
func runGoModTidyIfNeeded() { // Se le dipendenze non sono installate, esegui 'go mod tidy'
35+
// Controlla se il file go.sum esiste. Se non esiste, esegue 'go mod tidy'
36+
if _, err := os.Stat("go.sum"); os.IsNotExist(err) {
37+
fmt.Println("Prima esecuzione rilevata, eseguo 'go mod tidy'...")
38+
cmd := exec.Command("go", "mod", "tidy")
39+
cmd.Stdout = os.Stdout
40+
cmd.Stderr = os.Stderr
41+
if err := cmd.Run(); err != nil {
42+
log.Fatalf("Errore durante 'go mod tidy': %v", err)
43+
}
44+
}
45+
}
46+
47+
func startServer() { // Avvia il server Go
48+
// Controlla se il file main.go esiste. Se non esiste, mostra un messaggio di errore
49+
fmt.Println("Avvio del server...")
50+
switch runtime.GOOS {
51+
case "windows":
52+
// Su Windows, avvia il server in una nuova finestra di terminale usando cmd.exe
53+
cmd := exec.Command("cmd", "/c", "start", "go", "run", "main.go")
54+
cmd.Stdout = os.Stdout
55+
cmd.Stderr = os.Stderr
56+
cmd.Stdin = os.Stdin
57+
if err := cmd.Run(); err != nil {
58+
log.Fatalf("Errore durante l'avvio del server: %v", err)
59+
}
60+
fmt.Println("Server avviato in una nuova finestra del terminale.")
61+
default:
62+
// Su Linux/macOS avvia il server in background
63+
cmd := exec.Command("nohup", "go", "run", "main.go", "&")
64+
cmd.Stdout = os.Stdout
65+
cmd.Stderr = os.Stderr
66+
cmd.Stdin = os.Stdin
67+
if err := cmd.Run(); err != nil {
68+
log.Fatalf("Errore durante l'avvio del server: %v", err)
69+
}
70+
fmt.Println("Server avviato in background.")
71+
}
72+
}
73+
74+
func shutdownServer() { // Spegne il server Go
75+
// Per Windows, usa taskkill
76+
if runtime.GOOS == "windows" {
77+
cmd := exec.Command("taskkill", "/F", "/IM", "main.exe") // Assicurati che il nome dell'eseguibile sia corretto
78+
cmd.Stdout = os.Stdout
79+
cmd.Stderr = os.Stderr
80+
err := cmd.Run()
81+
if err != nil {
82+
log.Println("Errore durante lo spegnimento del server:", err)
83+
} else {
84+
fmt.Println("Server spento.")
85+
}
86+
} else {
87+
// Per Linux/macOS, usa pkill
88+
cmd := exec.Command("pkill", "-f", "main.go") // Questo funziona su Linux/macOS
89+
cmd.Stdout = os.Stdout
90+
cmd.Stderr = os.Stderr
91+
err := cmd.Run()
92+
if err != nil {
93+
log.Println("Errore durante lo spegnimento del server:", err)
94+
} else {
95+
fmt.Println("Server spento.")
96+
}
97+
}
98+
}

0 commit comments

Comments
 (0)