Kind of daemonize it
This commit is contained in:
parent
b380e96205
commit
0750c4afe3
|
@ -0,0 +1,2 @@
|
||||||
|
#!/bin/bash
|
||||||
|
gcloud compute scp --recurse kelvinly-server kelvin@senor-servidor1:/home/kelvin/
|
|
@ -2,7 +2,8 @@
|
||||||
|
|
||||||
sudo add-apt-repository ppa:gophers/archive
|
sudo add-apt-repository ppa:gophers/archive
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install golang-1.10-go
|
sudo apt-get -y install golang-1.10-go
|
||||||
|
sudo apt-get -y install iptables-persistent
|
||||||
|
|
||||||
mkdir -p ~/go
|
mkdir -p ~/go
|
||||||
|
|
||||||
|
@ -12,3 +13,4 @@ cat "export GOPATH=~/go" >> ~/.bashrc
|
||||||
source ~/.bashrc
|
source ~/.bashrc
|
||||||
go get -u gopkg.in/russross/blackfriday.v2
|
go get -u gopkg.in/russross/blackfriday.v2
|
||||||
go get -u https://github.com/shurcooL/github_flavored_markdown
|
go get -u https://github.com/shurcooL/github_flavored_markdown
|
||||||
|
go get -u github.com/sevlyar/go-daemon
|
||||||
|
|
99
main.go
99
main.go
|
@ -2,17 +2,29 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"context"
|
||||||
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
"syscall"
|
||||||
|
|
||||||
|
"github.com/sevlyar/go-daemon"
|
||||||
gfm "github.com/shurcooL/github_flavored_markdown"
|
gfm "github.com/shurcooL/github_flavored_markdown"
|
||||||
"github.com/shurcooL/github_flavored_markdown/gfmstyle"
|
"github.com/shurcooL/github_flavored_markdown/gfmstyle"
|
||||||
//blackfriday "gopkg.in/russross/blackfriday.v2"
|
//blackfriday "gopkg.in/russross/blackfriday.v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
signal = flag.String("s", "", `send signal to the daemon
|
||||||
|
quit — graceful shutdown
|
||||||
|
stop — fast shutdown
|
||||||
|
reload — reloading the configuration file`)
|
||||||
|
)
|
||||||
|
|
||||||
const HTML_HEADER = `<!doctype html5>
|
const HTML_HEADER = `<!doctype html5>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
|
@ -71,11 +83,86 @@ func rootHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
shutdown chan struct{} = make(chan struct{})
|
||||||
|
serverShutdown chan struct{} = make(chan struct{})
|
||||||
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
log.Print("installing handlers")
|
flag.Parse()
|
||||||
http.HandleFunc("/", rootHandler)
|
daemon.AddCommand(daemon.StringFlag(signal, "quit"), syscall.SIGQUIT, termHandler)
|
||||||
http.Handle("/gfm/", http.StripPrefix("/gfm", http.FileServer(gfmstyle.Assets)))
|
daemon.AddCommand(daemon.StringFlag(signal, "stop"), syscall.SIGTERM, termHandler)
|
||||||
http.HandleFunc("/main.css", func(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, "main.css") })
|
daemon.AddCommand(daemon.StringFlag(signal, "reload"), syscall.SIGHUP, reloadHandler)
|
||||||
log.Print("starting server")
|
|
||||||
log.Fatal(http.ListenAndServe(":80", nil))
|
cntxt := &daemon.Context{
|
||||||
|
PidFileName: "/tmp/kelvinly-server-pid",
|
||||||
|
PidFilePerm: 0644,
|
||||||
|
LogFileName: "/tmp/kelvinly-server-log",
|
||||||
|
LogFilePerm: 0640,
|
||||||
|
WorkDir: "./",
|
||||||
|
Umask: 027,
|
||||||
|
}
|
||||||
|
// TODO: figure out the daemonizing stuff
|
||||||
|
|
||||||
|
if len(daemon.ActiveFlags()) > 0 {
|
||||||
|
d, err := cntxt.Search()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln("Unable to send signal to daemon:", err)
|
||||||
|
}
|
||||||
|
daemon.SendCommands(d)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
d, err := cntxt.Reborn()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
if d != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer cntxt.Release()
|
||||||
|
|
||||||
|
var srv http.Server
|
||||||
|
|
||||||
|
go startServer(&srv)
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
<-shutdown
|
||||||
|
log.Println("shutting down server...")
|
||||||
|
if err := srv.Shutdown(context.Background()); err != nil {
|
||||||
|
log.Printf("server shutdown error: %v\n", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
err = daemon.ServeSignals()
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Error: ", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("server terminated")
|
||||||
|
}
|
||||||
|
|
||||||
|
func termHandler(sig os.Signal) error {
|
||||||
|
log.Printf("sending shutdown signal...")
|
||||||
|
close(shutdown)
|
||||||
|
return daemon.ErrStop
|
||||||
|
}
|
||||||
|
|
||||||
|
func reloadHandler(sig os.Signal) error {
|
||||||
|
log.Printf("[WARN] reloading not supported yet")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func startServer(srv *http.Server) {
|
||||||
|
log.Print("installing handlers")
|
||||||
|
serveMux := http.NewServeMux()
|
||||||
|
serveMux.HandleFunc("/", rootHandler)
|
||||||
|
serveMux.Handle("/gfm/", http.StripPrefix("/gfm", http.FileServer(gfmstyle.Assets)))
|
||||||
|
serveMux.HandleFunc("/main.css", func(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, "main.css") })
|
||||||
|
|
||||||
|
srv.Addr = ":8000"
|
||||||
|
srv.Handler = serveMux
|
||||||
|
log.Print("starting server")
|
||||||
|
log.Fatal(srv.ListenAndServe())
|
||||||
|
close(serverShutdown)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
kill `cat /tmp/kelvinly-server-pid`
|
Loading…
Reference in New Issue