1
0
mirror of https://github.com/peterbourgon/runsvinit.git synced 2026-03-19 22:27:23 +01:00

4 Commits

Author SHA1 Message Date
Peter Bourgon
692c29d543 Fix some signal handling 2015-09-25 16:14:09 +02:00
Peter Bourgon
f90dea03d7 Release updates 2015-09-25 15:43:07 +02:00
Peter Bourgon
9388d1daa1 Update example 2015-09-25 15:31:54 +02:00
Peter Bourgon
9e1f282bcc Use releases in Dockerfile 2015-09-25 15:15:17 +02:00
5 changed files with 34 additions and 7 deletions

2
.gitignore vendored
View File

@@ -1,4 +1,6 @@
runsvinit runsvinit
runsvinit-*-*
examples/runsvinit-linux-amd64*
# Compiled Object files, Static and Dynamic libs (Shared Objects) # Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o *.o

View File

@@ -11,5 +11,5 @@ ADD bar /
RUN mkdir -p /etc/service/bar RUN mkdir -p /etc/service/bar
ADD run-bar /etc/service/bar/run ADD run-bar /etc/service/bar/run
ADD runsvinit / ADD /runsvinit /
ENTRYPOINT ["/runsvinit"] ENTRYPOINT ["/runsvinit"]

10
example/Makefile Normal file
View File

@@ -0,0 +1,10 @@
.PHONY: docker
docker: runsvinit
docker build -t runsvinit-example .
runsvinit: runsvinit-linux-amd64.tgz
tar zxf $<
runsvinit-linux-amd64.tgz:
wget --quiet https://github.com/peterbourgon/runsvinit/releases/download/v2.0.0/runsvinit-linux-amd64.tgz

14
example/README.md Normal file
View File

@@ -0,0 +1,14 @@
# runsvinit example
## Build the Docker container
`make`
## Run the Docker container
`docker run --name example runsvinit-example:latest`
## Test it works
CTRL-C, or `docker stop example`.

13
main.go
View File

@@ -44,7 +44,7 @@ func main() {
log.Printf("%s started", runsvdir) log.Printf("%s started", runsvdir)
go gracefulShutdown(sv, supervisor.Process) go shutdown(sv, supervisor.Process)
if err := supervisor.Wait(); err != nil { if err := supervisor.Wait(); err != nil {
log.Printf("%s exited with error: %v", runsvdir, err) log.Printf("%s exited with error: %v", runsvdir, err)
@@ -84,10 +84,11 @@ type signaler interface {
Signal(os.Signal) error Signal(os.Signal) error
} }
func gracefulShutdown(sv string, s signaler) { func shutdown(sv string, s signaler) {
c := make(chan os.Signal) c := make(chan os.Signal)
signal.Notify(c, syscall.SIGTERM, syscall.SIGINT) signal.Notify(c, syscall.SIGTERM, syscall.SIGINT)
log.Printf("received %s", <-c) sig := <-c
log.Printf("received %s", sig)
matches, err := filepath.Glob(filepath.Join(etcService, "*")) matches, err := filepath.Glob(filepath.Join(etcService, "*"))
if err != nil { if err != nil {
@@ -116,11 +117,11 @@ func gracefulShutdown(sv string, s signaler) {
} }
log.Printf("stopped %d: %s", len(stopped), strings.Join(stopped, ", ")) log.Printf("stopped %d: %s", len(stopped), strings.Join(stopped, ", "))
log.Printf("stopping supervisor...") log.Printf("stopping supervisor with signal %s...", sig)
if err := s.Signal(syscall.SIGTERM); err != nil { if err := s.Signal(sig); err != nil {
log.Print(err) log.Print(err)
} }
log.Printf("graceful SIGTERM handler exiting") log.Printf("shutdown handler exiting")
} }
func cmd(path string, args ...string) *exec.Cmd { func cmd(path string, args ...string) *exec.Cmd {