Use libsystemd to inform systemd accurately about when the service is up and running.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 10 Aug 2015 22:13:39 +0000 (00:13 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 10 Aug 2015 22:15:12 +0000 (00:15 +0200)
Makefile
cubemap.service.in
main.cpp

index d426bc1..abadaf7 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -2,8 +2,8 @@ CC=gcc
 CXX=g++
 INSTALL=install
 PROTOC=protoc
-CXXFLAGS=-Wall -O2 -g -pthread $(shell getconf LFS_CFLAGS)
-LDLIBS=-lprotobuf -pthread -lrt
+CXXFLAGS=-Wall -O2 -g -pthread $(shell getconf LFS_CFLAGS) $(shell pkg-config --cflags libsystemd)
+LDLIBS=-lprotobuf -pthread -lrt $(shell pkg-config --libs libsystemd)
 
 OBJS=main.o client.o server.o stream.o udpstream.o serverpool.o mutexlock.o input.o input_stats.o httpinput.o udpinput.o parse.o config.o acceptor.o stats.o accesslog.o thread.o util.o log.o metacube2.o sa_compare.o state.pb.o
 
index 442e019..9fe97ed 100644 (file)
@@ -2,7 +2,7 @@
 Description=Cubemap stream relay
 
 [Service]
-Type=simple
+Type=notify
 ExecStart=@prefix@/bin/cubemap @sysconfdir@/cubemap.config
 User=cubemap
 ExecReload=/bin/kill -HUP $MAINPID
index 98d0948..eccf6d7 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -9,6 +9,7 @@
 #include <string.h>
 #include <sys/time.h>
 #include <sys/wait.h>
+#include <systemd/sd-daemon.h>
 #include <unistd.h>
 #include <algorithm>
 #include <map>
@@ -541,10 +542,18 @@ start:
                log(INFO, "Re-exec happened in approx. %.0f ms.", glitch_time * 1000.0);
        }
 
+       sd_notify(0, "READY=1");
+
        while (!hupped) {
                usleep(100000);
        }
 
+       if (stopped) {
+               sd_notify(0, "STOPPING=1");
+       } else {
+               sd_notify(0, "RELOADING=1");
+       }
+
        // OK, we've been HUPed. Time to shut down everything, serialize, and re-exec.
        err = clock_gettime(CLOCK_MONOTONIC, &serialize_start);
        assert(err != -1);