Merge pull request #8581 from bebehei/shell-exitcode

Shell exitcode
This commit is contained in:
Julian Brost 2021-01-14 09:56:21 +01:00 committed by GitHub
commit a68d774f78
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 104 additions and 82 deletions

View File

@ -24,45 +24,56 @@ fi
# load system specific defines # load system specific defines
SYSCONFIGFILE=@ICINGA2_SYSCONFIGFILE@ SYSCONFIGFILE=@ICINGA2_SYSCONFIGFILE@
if [ -f $SYSCONFIGFILE ]; then if [ -f "$SYSCONFIGFILE" ]; then
. $SYSCONFIGFILE . "$SYSCONFIGFILE"
else else
echo "Couldn't load system specific defines from $SYSCONFIGFILE. Using defaults." echo "Couldn't load system specific defines from $SYSCONFIGFILE. Using defaults."
fi fi
# Set defaults, to overwrite see "@ICINGA2_SYSCONFIGFILE@" # Set defaults, to overwrite see "@ICINGA2_SYSCONFIGFILE@"
: ${ICINGA2_USER:="@ICINGA2_USER@"} : "${ICINGA2_USER:="@ICINGA2_USER@"}"
: ${ICINGA2_GROUP:="@ICINGA2_GROUP@"} : "${ICINGA2_GROUP:="@ICINGA2_GROUP@"}"
: ${ICINGA2_COMMAND_GROUP:="@ICINGA2_COMMAND_GROUP@"} : "${ICINGA2_COMMAND_GROUP:="@ICINGA2_COMMAND_GROUP@"}"
: ${DAEMON:="@CMAKE_INSTALL_FULL_SBINDIR@/icinga2"} : "${DAEMON:="@CMAKE_INSTALL_FULL_SBINDIR@/icinga2"}"
: ${ICINGA2_CONFIG_FILE:="@ICINGA2_CONFIGDIR@/icinga2.conf"} : "${ICINGA2_CONFIG_FILE:="@ICINGA2_CONFIGDIR@/icinga2.conf"}"
: ${ICINGA2_ERROR_LOG:=@ICINGA2_LOGDIR@/error.log} : "${ICINGA2_ERROR_LOG:=@ICINGA2_LOGDIR@/error.log}"
: ${ICINGA2_STARTUP_LOG:=@ICINGA2_LOGDIR@/startup.log} : "${ICINGA2_STARTUP_LOG:=@ICINGA2_LOGDIR@/startup.log}"
: ${ICINGA2_PID_FILE:="@ICINGA2_INITRUNDIR@/icinga2.pid"} : "${ICINGA2_PID_FILE:="@ICINGA2_INITRUNDIR@/icinga2.pid"}"
# Load extra environment variables # Load extra environment variables
if [ -f /etc/default/icinga2 ]; then if [ -f /etc/default/icinga2 ]; then
. /etc/default/icinga2 . /etc/default/icinga2
fi fi
test -x $DAEMON || exit 5 test -x "$DAEMON" || exit 5
if [ ! -e $ICINGA2_CONFIG_FILE ]; then if [ ! -e "$ICINGA2_CONFIG_FILE" ]; then
echo "Config file '$ICINGA2_CONFIG_FILE' does not exist." echo "Config file '$ICINGA2_CONFIG_FILE' does not exist."
exit 6 exit 6
fi fi
getent passwd $ICINGA2_USER >/dev/null 2>&1 || (echo "Icinga user '$ICINGA2_USER' does not exist. Exiting." && exit 6) if ! getent passwd "$ICINGA2_USER" >/dev/null 2>&1; then
getent group $ICINGA2_GROUP >/dev/null 2>&1 || (echo "Icinga group '$ICINGA2_GROUP' does not exist. Exiting." && exit 6) echo "Icinga user '$ICINGA2_USER' does not exist. Exiting."
getent group $ICINGA2_COMMAND_GROUP >/dev/null 2>&1 || (echo "Icinga command group '$ICINGA2_COMMAND_GROUP' does not exist. Exiting." && exit 6) exit 6
fi
if ! getent group "$ICINGA2_GROUP" >/dev/null 2>&1; then
echo "Icinga group '$ICINGA2_GROUP' does not exist. Exiting."
exit 6
fi
if ! getent group "$ICINGA2_COMMAND_GROUP" >/dev/null 2>&1; then
echo "Icinga command group '$ICINGA2_COMMAND_GROUP' does not exist. Exiting."
exit 6
fi
# Start Icinga 2 # Start Icinga 2
start() { start() {
printf "Starting Icinga 2: " printf "Starting Icinga 2: "
@CMAKE_INSTALL_PREFIX@/lib/icinga2/prepare-dirs "$SYSCONFIGFILE" @CMAKE_INSTALL_PREFIX@/lib/icinga2/prepare-dirs "$SYSCONFIGFILE"
if ! $DAEMON daemon -c $ICINGA2_CONFIG_FILE -d -e $ICINGA2_ERROR_LOG > $ICINGA2_STARTUP_LOG 2>&1; then if ! "$DAEMON" daemon -c "$ICINGA2_CONFIG_FILE" -d -e "$ICINGA2_ERROR_LOG" > "$ICINGA2_STARTUP_LOG" 2>&1; then
echo "Error starting Icinga. Check '$ICINGA2_STARTUP_LOG' for details." echo "Error starting Icinga. Check '$ICINGA2_STARTUP_LOG' for details."
exit 1 exit 1
else else
@ -74,7 +85,7 @@ start() {
stop() { stop() {
printf "Stopping Icinga 2: " printf "Stopping Icinga 2: "
if [ ! -e $ICINGA2_PID_FILE ]; then if [ ! -e "$ICINGA2_PID_FILE" ]; then
echo "The PID file '$ICINGA2_PID_FILE' does not exist." echo "The PID file '$ICINGA2_PID_FILE' does not exist."
if [ "x$1" = "xnofail" ]; then if [ "x$1" = "xnofail" ]; then
return return
@ -83,11 +94,11 @@ stop() {
fi fi
fi fi
pid=`cat $ICINGA2_PID_FILE` pid=`cat "$ICINGA2_PID_FILE"`
if icinga2 internal signal -s SIGINT -p $pid >/dev/null 2>&1; then if icinga2 internal signal -s SIGINT -p "$pid" >/dev/null 2>&1; then
for i in 1 2 3 4 5 6 7 8 9 10; do for i in 1 2 3 4 5 6 7 8 9 10; do
if ! icinga2 internal signal -s SIGCHLD -p $pid >/dev/null 2>&1; then if ! icinga2 internal signal -s SIGCHLD -p "$pid" >/dev/null 2>&1; then
break break
fi fi
@ -96,8 +107,8 @@ stop() {
done done
fi fi
if icinga2 internal signal -s SIGCHLD -p $pid >/dev/null 2>&1; then if icinga2 internal signal -s SIGCHLD -p "$pid" >/dev/null 2>&1; then
icinga2 internal signal -s SIGKILL -p $pid >/dev/null 2>&1 icinga2 internal signal -s SIGKILL -p "$pid" >/dev/null 2>&1
fi fi
echo "Done" echo "Done"
@ -112,13 +123,13 @@ reload() {
checkconfig() { checkconfig() {
printf "Checking configuration: " printf "Checking configuration: "
if ! $DAEMON daemon -c $ICINGA2_CONFIG_FILE -C > $ICINGA2_STARTUP_LOG 2>&1; then if ! "$DAEMON" daemon -c "$ICINGA2_CONFIG_FILE" -C > "$ICINGA2_STARTUP_LOG" 2>&1; then
if [ "x$1" = "x" ]; then if [ "x$1" = "x" ]; then
cat $ICINGA2_STARTUP_LOG cat "$ICINGA2_STARTUP_LOG"
echo "Icinga 2 detected configuration errors. Check '$ICINGA2_STARTUP_LOG' for details." echo "Icinga 2 detected configuration errors. Check '$ICINGA2_STARTUP_LOG' for details."
exit 1 exit 1
else else
echo "Not "$1"ing Icinga 2 due to configuration errors. Check '$ICINGA2_STARTUP_LOG' for details." echo "Not ${1}ing Icinga 2 due to configuration errors. Check '$ICINGA2_STARTUP_LOG' for details."
if [ "x$2" = "xfail" ]; then if [ "x$2" = "xfail" ]; then
exit 1 exit 1
fi fi
@ -128,7 +139,7 @@ checkconfig() {
echo "Done" echo "Done"
# no arguments requires full output # no arguments requires full output
if [ "x$1" = "x" ]; then if [ "x$1" = "x" ]; then
cat $ICINGA2_STARTUP_LOG cat "$ICINGA2_STARTUP_LOG"
fi fi
} }
@ -136,13 +147,13 @@ checkconfig() {
status() { status() {
printf "Icinga 2 status: " printf "Icinga 2 status: "
if [ ! -e $ICINGA2_PID_FILE ]; then if [ ! -e "$ICINGA2_PID_FILE" ]; then
echo "Not running" echo "Not running"
exit 3 exit 3
fi fi
pid=`cat $ICINGA2_PID_FILE` pid=`cat "$ICINGA2_PID_FILE"`
if icinga2 internal signal -s SIGCHLD -p $pid >/dev/null 2>&1; then if icinga2 internal signal -s SIGCHLD -p "$pid" >/dev/null 2>&1; then
echo "Running" echo "Running"
else else
echo "Not running" echo "Not running"
@ -168,8 +179,7 @@ case "$1" in
start start
;; ;;
condrestart) condrestart)
STATUS=$(status > /dev/null 2>&1) status > /dev/null 2>&1 || exit 0
if [ $? != 0 ]; then exit 0; fi
checkconfig restart fail checkconfig restart fail
stop nofail stop nofail
start start

View File

@ -14,28 +14,39 @@ fi
# Set defaults, to overwrite see "@ICINGA2_SYSCONFIGFILE@" # Set defaults, to overwrite see "@ICINGA2_SYSCONFIGFILE@"
: ${ICINGA2_USER:="@ICINGA2_USER@"} : "${ICINGA2_USER:="@ICINGA2_USER@"}"
: ${ICINGA2_GROUP:="@ICINGA2_GROUP@"} : "${ICINGA2_GROUP:="@ICINGA2_GROUP@"}"
: ${ICINGA2_COMMAND_GROUP:="@ICINGA2_COMMAND_GROUP@"} : "${ICINGA2_COMMAND_GROUP:="@ICINGA2_COMMAND_GROUP@"}"
: ${ICINGA2_INIT_RUN_DIR:="@ICINGA2_FULL_INITRUNDIR@"} : "${ICINGA2_INIT_RUN_DIR:="@ICINGA2_FULL_INITRUNDIR@"}"
: ${ICINGA2_LOG_DIR:="@ICINGA2_FULL_LOGDIR@"} : "${ICINGA2_LOG_DIR:="@ICINGA2_FULL_LOGDIR@"}"
: ${ICINGA2_CACHE_DIR:="@ICINGA2_FULL_CACHEDIR@"} : "${ICINGA2_CACHE_DIR:="@ICINGA2_FULL_CACHEDIR@"}"
getent passwd $ICINGA2_USER >/dev/null 2>&1 || (echo "Icinga user '$ICINGA2_USER' does not exist. Exiting." && exit 6) if ! getent passwd "$ICINGA2_USER" >/dev/null 2>&1; then
getent group $ICINGA2_GROUP >/dev/null 2>&1 || (echo "Icinga group '$ICINGA2_GROUP' does not exist. Exiting." && exit 6) echo "Icinga user '$ICINGA2_USER' does not exist. Exiting."
getent group $ICINGA2_COMMAND_GROUP >/dev/null 2>&1 || (echo "Icinga command group '$ICINGA2_COMMAND_GROUP' does not exist. Exiting." && exit 6) exit 6
fi
if ! getent group "$ICINGA2_GROUP" >/dev/null 2>&1; then
echo "Icinga group '$ICINGA2_GROUP' does not exist. Exiting."
exit 6
fi
if ! getent group "$ICINGA2_COMMAND_GROUP" >/dev/null 2>&1; then
echo "Icinga command group '$ICINGA2_COMMAND_GROUP' does not exist. Exiting."
exit 6
fi
if [ ! -e "$ICINGA2_INIT_RUN_DIR" ]; then if [ ! -e "$ICINGA2_INIT_RUN_DIR" ]; then
mkdir -m 755 "$ICINGA2_INIT_RUN_DIR" mkdir -m 755 "$ICINGA2_INIT_RUN_DIR"
mkdir -m 2750 "$ICINGA2_INIT_RUN_DIR"/cmd mkdir -m 2750 "$ICINGA2_INIT_RUN_DIR"/cmd
fi fi
chown -R $ICINGA2_USER:$ICINGA2_COMMAND_GROUP "$ICINGA2_INIT_RUN_DIR" chown -R "$ICINGA2_USER:$ICINGA2_COMMAND_GROUP" "$ICINGA2_INIT_RUN_DIR"
test -e "$ICINGA2_LOG_DIR" || install -m 750 -o $ICINGA2_USER -g $ICINGA2_COMMAND_GROUP -d "$ICINGA2_LOG_DIR" test -e "$ICINGA2_LOG_DIR" || install -m 750 -o "$ICINGA2_USER" -g "$ICINGA2_COMMAND_GROUP" -d "$ICINGA2_LOG_DIR"
if type restorecon >/dev/null 2>&1; then if type restorecon >/dev/null 2>&1; then
restorecon -R "$ICINGA2_INIT_RUN_DIR"/ restorecon -R "$ICINGA2_INIT_RUN_DIR"/
fi fi
test -e "$ICINGA2_CACHE_DIR" || install -m 750 -o $ICINGA2_USER -g $ICINGA2_COMMAND_GROUP -d "$ICINGA2_CACHE_DIR" test -e "$ICINGA2_CACHE_DIR" || install -m 750 -o "$ICINGA2_USER" -g "$ICINGA2_COMMAND_GROUP" -d "$ICINGA2_CACHE_DIR"

View File

@ -5,14 +5,15 @@ if [ "$1" != "" ]; then
if [ -r "$1" ]; then if [ -r "$1" ]; then
. "$1" . "$1"
else else
echo "Unable to read sysconf from '$1'. Exiting." && exit 6 echo "Unable to read sysconf from '$1'. Exiting."
exit 6
fi fi
fi fi
# Set defaults, to overwrite see "@ICINGA2_SYSCONFIGFILE@" # Set defaults, to overwrite see "@ICINGA2_SYSCONFIGFILE@"
: ${ICINGA2_PID_FILE:="@ICINGA2_FULL_INITRUNDIR@/icinga2.pid"} : "${ICINGA2_PID_FILE:="@ICINGA2_FULL_INITRUNDIR@/icinga2.pid"}"
: ${DAEMON:="@CMAKE_INSTALL_FULL_SBINDIR@/icinga2"} : "${DAEMON:="@CMAKE_INSTALL_FULL_SBINDIR@/icinga2"}"
printf "Validating config files: " printf "Validating config files: "
@ -20,29 +21,29 @@ OUTPUTFILE=`mktemp`
if type selinuxenabled >/dev/null 2>&1; then if type selinuxenabled >/dev/null 2>&1; then
if selinuxenabled; then if selinuxenabled; then
chcon -t icinga2_tmp_t $OUTPUTFILE >/dev/null 2>&1 chcon -t icinga2_tmp_t "$OUTPUTFILE" >/dev/null 2>&1
fi fi
fi fi
if ! $DAEMON daemon --validate --color > $OUTPUTFILE; then if ! "$DAEMON" daemon --validate --color > "$OUTPUTFILE"; then
echo "Failed" echo "Failed"
cat $OUTPUTFILE cat "$OUTPUTFILE"
rm -f $OUTPUTFILE rm -f "$OUTPUTFILE"
exit 1 exit 1
fi fi
echo "Done" echo "Done"
rm -f $OUTPUTFILE rm -f "$OUTPUTFILE"
printf "Reloading Icinga 2: " printf "Reloading Icinga 2: "
if [ ! -e $ICINGA2_PID_FILE ]; then if [ ! -e "$ICINGA2_PID_FILE" ]; then
exit 7 exit 7
fi fi
pid=`cat $ICINGA2_PID_FILE` pid=`cat "$ICINGA2_PID_FILE"`
if ! kill -HUP $pid >/dev/null 2>&1; then if ! kill -HUP "$pid" >/dev/null 2>&1; then
echo "Error: Icinga not running" echo "Error: Icinga not running"
exit 7 exit 7
fi fi