ho creato monit app che deve riavviare golang site
su incidentemmonit golang riavvio lento e lo stato non esiste
$ cd /etc/monit/conf.d
$ vim checkSite
Si programma a partire con nohup
e salvare la sua pid
su file:
check process site with pidfile /root/go/path/to/goSite/run.pid
start program = "/bin/bash -c 'cd /root/go/path/to/goSitePath; nohup ./goSite > /dev/null 2>&1 & echo $! > run.pid'" with timeout 5 seconds
stop program = "/bin/kill -9 `cat /root/go/path/to/goSitePath/run.pid`"
Si parte ok.
Process 'site'
status Running
monitoring status Monitored
pid 29723
parent pid 1
uptime 2m
children 0
memory kilobytes 8592
memory kilobytes total 8592
memory percent 0.4%
memory percent total 0.4%
cpu percent 0.0%
cpu percent total 0.0%
data collected Thu, 05 Mar 2015 07:20:32
Poi per verificare come si riavvia il crollo ho ucciso manualmente golang site
.
Qui ho due problemi:
- sito viene riavviato piuttosto lento: ci vogliono 1 minuti, anche se in configurazione ho impostato
with timeout 5 seconds
- Stato di
site
inmonit
diventaDoes not exist
anche dopo sito in riavvio fatto. Immagino che ciò si verifichi perché dopo aver ucciso e riavviato il sitopid
è cambiato in modo casuale, ma come non riuscire a superarlo.
stato dopo il riavvio:
Process 'site'
status Does not exist
monitoring status Monitored
data collected Thu, 05 Mar 2015 08:04:44
come ridurre il tempo di riavvio e di come riparare il sito di monit status
?
monit
registro:
[Mar 5 08:04:44] error : 'site' process is not running
[Mar 5 08:04:44] info : 'site' trying to restart
[Mar 5 08:04:44] info : 'site' start: /bin/bash
[Mar 5 08:06:44] info : 'site' process is running with pid 31479
Aggiornamento
Il mio sito golang è piuttosto semplice:
package main
import (
"fmt"
"github.com/go-martini/martini"
)
func main() {
m := martini.Classic()
m.Get("/", func() {
fmt.Println("main page")
})
m.Run()
}
Update 2
Ho cercato di aumentare la velocità di monit ricaricare il mio sito golang rimuovendo il file pid stesso. Dire che ho fatto kill 29723 && rm run.pid
e acceso il timer per contare il tempo per il sito è stato nuovamente accessibile. Ci sono voluti 85 secondi. Quindi la rimozione del file pid non ha aiutato a monitorare per aumentare la velocità del sito di ricarica.
Sarebbe di grande aiuto se mostrassi del codice. Per catturare segnali come sigint avrai bisogno di un po 'di codice, vedi http://stackoverflow.com/questions/11268943/golang-is-it-possible-to-capture-a-ctrlc-signal-and-run-a -cleanup-function-in – metakeule
Si potrebbe anche provare a scrivere il PID tramite os.Getpid() dall'interno del programma go. – metakeule
Provare a rimuovere il file PID dall'interno del programma go all'interno di un blocco di recupero differito e ad interrompere i segnali e scrivere un nuovo file PID se il processo (ri) inizia. – metakeule