mirror of
https://github.com/peterbourgon/runsvinit.git
synced 2026-03-19 22:27:23 +01:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
692c29d543 | ||
|
|
f90dea03d7 | ||
|
|
9388d1daa1 | ||
|
|
9e1f282bcc |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -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
|
||||||
|
|||||||
@@ -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
10
example/Makefile
Normal 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
14
example/README.md
Normal 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
13
main.go
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user