diff options
| -rwxr-xr-x | tools/quagga | 14 | ||||
| -rw-r--r-- | watchquagga/watchquagga.c | 24 |
2 files changed, 35 insertions, 3 deletions
diff --git a/tools/quagga b/tools/quagga index 83dfb63029..e8595d7877 100755 --- a/tools/quagga +++ b/tools/quagga @@ -33,7 +33,6 @@ else SSD=`which start-stop-daemon` fi -echo ${SSD} # Print the name of the pidfile. pidfile() { @@ -114,12 +113,23 @@ start() echo -n " $1" fi + if [ -e /var/run/quagga/watchquagga.started ] ; then + rm /var/run/quagga/watchquagga.started + fi ${SSD} \ --start \ --pidfile=`pidfile $1` \ --exec "$D_PATH/$1" \ -- \ "${watchquagga_options[@]}" + for i in `seq 1 10`; + do + if [ -e /var/run/quagga/watchquagga.started ] ; then + break + else + sleep 1 + fi + done elif [ -n "$2" ]; then echo -n " $1-$2" if ! check_daemon $1 $2 ; then @@ -502,8 +512,8 @@ case "$1" in if [ "$2" != "watchquagga" ]; then start_prio 10 $dmn fi - vtysh_b start_watchquagga + vtysh_b ;; 1|2|3|4|5|6|7|8|9|10) diff --git a/watchquagga/watchquagga.c b/watchquagga/watchquagga.c index e882653e38..cb9d50ff88 100644 --- a/watchquagga/watchquagga.c +++ b/watchquagga/watchquagga.c @@ -682,6 +682,28 @@ handle_read(struct thread *t_read) return 0; } +/* + * Wait till we notice that all daemons are ready before + * we send we are ready to systemd + */ +static void +daemon_send_ready (void) +{ + static int sent = 0; + if (!sent && gs.numdown == 0) + { +#if defined (HAVE_CUMULUS) + FILE *fp; + + fp = fopen("/var/run/quagga/watchquagga.started", "w"); + fclose(fp); +#endif + zlog_notice ("Watchquagga: Notifying Systemd we are up and running"); + systemd_send_started(master, 0); + sent = 1; + } +} + static void daemon_up(struct daemon *dmn, const char *why) { @@ -689,6 +711,7 @@ daemon_up(struct daemon *dmn, const char *why) gs.numdown--; dmn->connect_tries = 0; zlog_notice("%s state -> up : %s",dmn->name,why); + daemon_send_ready(); if (gs.do_ping) SET_WAKEUP_ECHO(dmn); phase_check(); @@ -1284,7 +1307,6 @@ main(int argc, char **argv) gs.restart.interval = gs.min_restart_interval; master = thread_master_create(); - systemd_send_started (master, 0); signal_init (master, array_size(my_signals), my_signals); srandom(time(NULL)); |
