From: Markus Valentin Date: Wed, 19 Jun 2019 14:29:49 +0000 (+0200) Subject: script: health-check: add health-check.sh default script X-Git-Tag: 2.3.8~211 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8f39804d49adf39d44a1e519b6af1ee0e7786e3e;p=thirdparty%2Fdovecot%2Fcore.git script: health-check: add health-check.sh default script As a example for an simple tcp health check the health-check.sh script is added. It closes the connection after 10 seconds and only answer to "PING\n" with a "PONG\n". It is installed by default next to the script executable. --- diff --git a/src/util/Makefile.am b/src/util/Makefile.am index e1b522a1ec..3e1dd8ff3b 100644 --- a/src/util/Makefile.am +++ b/src/util/Makefile.am @@ -45,7 +45,8 @@ script_LDADD = $(LIBDOVECOT) \ $(BINARY_LDFLAGS) script_DEPENDENCIES = $(LIBDOVECOT_DEPS) script_SOURCES = \ - script.c + script.c \ + health-check-settings.c if TCPWRAPPERS TCPWRAP_BIN = tcpwrap @@ -71,3 +72,6 @@ maildirlock_LDADD = $(LIBDOVECOT) \ maildirlock_DEPENDENCIES = $(LIBDOVECOT_DEPS) maildirlock_SOURCES = \ maildirlock.c + +pkglibexec_SCRIPTS = health-check.sh +EXTRA_DIST = $(pkglibexec_SCRIPTS) diff --git a/src/util/health-check-settings.c b/src/util/health-check-settings.c new file mode 100644 index 0000000000..f6732719bb --- /dev/null +++ b/src/util/health-check-settings.c @@ -0,0 +1,31 @@ +/* Copyright (c) 2019 Dovecot authors, see the included COPYING file */ + +#include "lib.h" +#include "buffer.h" +#include "settings-parser.h" +#include "service-settings.h" + +struct service_settings health_check_service_settings = { + .name = "health-check", + .protocol = "", + .type = "", + .executable = "script -p health-check.sh", + .user = "$default_internal_user", + .group = "", + .privileged_group = "", + .extra_groups = "", + .chroot = "", + + .drop_priv_before_exec = TRUE, + + .process_min_avail = 0, + .process_limit = 0, + .client_limit = 1, + .service_count = 0, + .idle_kill = 0, + .vsz_limit = (uoff_t)-1, + + .unix_listeners = ARRAY_INIT, + .fifo_listeners = ARRAY_INIT, + .inet_listeners = ARRAY_INIT +}; diff --git a/src/util/health-check.sh b/src/util/health-check.sh new file mode 100755 index 0000000000..119990fb42 --- /dev/null +++ b/src/util/health-check.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +# +# Copyright (c) 2019 Dovecot authors, see the included COPYING file */ +# +# This script is intended to be called by the script service and to be +# connected to a socket using a service configuration like this: +# executable = script -p /path/to/health-check.sh +# +# This simple example merely answers "PONG\n" if the input is "PING\n". It +# stops waiting for input after $TIMEOUT which causes the process to die +# which causes the script module to close the socket. Inputs and outputs +# can be written to STDIN and STDOUT, they are duplicated file-descriptors +# if called from the script service. + +TIMEOUT=10 + +read -t ${TIMEOUT} -r input + +exit_code=$? +cleaned_input=${input//[^a-zA-Z0-9]/} + +if [ $exit_code -eq 0 ] && [ "$cleaned_input" = "PING" ];then + echo "PONG" +fi +# always exit successful +exit 0