Initial Upload
This commit is contained in:
30
docker/usr/local/bin/httpd-foreground
Normal file
30
docker/usr/local/bin/httpd-foreground
Normal file
@@ -0,0 +1,30 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (C) 2023 Xibo Signage Ltd
|
||||
#
|
||||
# Xibo - Digital Signage - https://xibosignage.com
|
||||
#
|
||||
# This file is part of Xibo.
|
||||
#
|
||||
# Xibo is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# any later version.
|
||||
#
|
||||
# Xibo is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with Xibo. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
set -e
|
||||
|
||||
# Apache gets grumpy about PID files pre-existing
|
||||
rm -rf /run/apache2/*
|
||||
|
||||
source /etc/apache2/envvars
|
||||
|
||||
/usr/sbin/apache2 -DFOREGROUND
|
||||
151
docker/usr/local/bin/wait-for-command.sh
Normal file
151
docker/usr/local/bin/wait-for-command.sh
Normal file
@@ -0,0 +1,151 @@
|
||||
#!/usr/bin/env sh
|
||||
#
|
||||
# Compare a command exit status to some given number(s) for a period of time.
|
||||
|
||||
CMD_NAME="${0##*/}"
|
||||
CMD=""
|
||||
STATUS=0
|
||||
TIME=10
|
||||
TIME_START=0
|
||||
QUIET=0
|
||||
EXIT_STATUS=1
|
||||
|
||||
usage() {
|
||||
cat << EOF >&2
|
||||
Usage: ${CMD_NAME} [-c 'COMMAND']
|
||||
${CMD_NAME} [OPTION]... [-c 'COMMAND']
|
||||
${CMD_NAME} [-c 'COMMAND'] [OPTION]...
|
||||
|
||||
${CMD_NAME} compares a command exit status to some given number(s)
|
||||
for a period of time. If comparison is successfully
|
||||
${CMD_NAME} returns 0, otherwise 1.
|
||||
|
||||
Example: ${CMD_NAME} -c 'echo > /dev/tcp/127.0.0.1/5432'
|
||||
${CMD_NAME} -s 0 57 -c 'curl 127.0.0.1:5432'
|
||||
${CMD_NAME} -c 'nc -z 127.0.0.1 5432' -s 0 -t 20 -q
|
||||
|
||||
Options:
|
||||
-c, --command ['COMMAND'] execute a COMMAND.
|
||||
-s, --status [NUMBER]... target exit status of COMMAND, default 0.
|
||||
-t, --time [NUMBER] max time to wait in seconds, default 10.
|
||||
-q, --quiet do not make any output, default false.
|
||||
--help display this help.
|
||||
|
||||
Notice that quotes are needed after -c/--command for multi-argument
|
||||
COMMANDs.
|
||||
|
||||
Specifying a same OPTION more than once overrides the previews.
|
||||
So "${CMD_NAME} -c 'nothing' -c 'curl 127.0.0.1:5432'" will be
|
||||
the same as "${CMD_NAME} -c 'curl 127.0.0.1:5432'".
|
||||
It does not apply to option -q/--quiet.
|
||||
EOF
|
||||
exit 0
|
||||
}
|
||||
|
||||
output() {
|
||||
if [ "${QUIET}" -ne 1 ]; then
|
||||
printf "%s\n" "$*" 1>&2;
|
||||
fi
|
||||
}
|
||||
|
||||
process_command() {
|
||||
while [ "$#" -gt 0 ]; do
|
||||
case "$1" in
|
||||
-c | --command)
|
||||
# allow one shift when no arguments
|
||||
if [ -n "$2" ]; then
|
||||
CMD="$2"
|
||||
shift 1
|
||||
fi
|
||||
shift 1
|
||||
;;
|
||||
-s | --status)
|
||||
# ensure that a number is provided
|
||||
if ([ "$2" -eq "$2" ]) >/dev/null 2>&1; then
|
||||
unset STATUS
|
||||
# ensure that a number is provided
|
||||
while ([ "$2" -eq "$2" ]) >/dev/null 2>&1; do
|
||||
if [ -z "${STATUS}" ]; then
|
||||
STATUS="$2"
|
||||
shift 1
|
||||
else
|
||||
STATUS="${STATUS} $2"
|
||||
shift 1
|
||||
fi
|
||||
done
|
||||
fi
|
||||
shift 1
|
||||
;;
|
||||
-t | --time)
|
||||
# ensure that a number is provided
|
||||
if ([ "$2" -eq "$2" ]) >/dev/null 2>&1; then
|
||||
TIME="$2"
|
||||
shift 1
|
||||
fi
|
||||
shift 1
|
||||
;;
|
||||
-q | --quiet)
|
||||
QUIET=1
|
||||
shift 1
|
||||
;;
|
||||
--help)
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
output "Unknown argument: $1"
|
||||
output "Try '${CMD_NAME} --help' for more information."
|
||||
exit "${EXIT_STATUS}"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -z "${CMD}" ]; then
|
||||
output "Missing command: -c, --command ['COMMAND']"
|
||||
output "Try '${CMD_NAME} --help' for more information."
|
||||
exit "${EXIT_STATUS}"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
message="failed"
|
||||
|
||||
process_command "$@"
|
||||
|
||||
TIME_START=$(date +%s)
|
||||
|
||||
while [ $(($(date +%s)-TIME_START)) -lt "${TIME}" ]; do
|
||||
|
||||
($CMD) >/dev/null 2>&1 &
|
||||
pid="$!"
|
||||
|
||||
# while both ps and time are running sleep 1s
|
||||
while kill -0 "${pid}" >/dev/null 2>&1 &&
|
||||
[ $(($(date +%s)-TIME_START)) -lt "${TIME}" ]; do
|
||||
sleep 1
|
||||
done
|
||||
|
||||
# gets CMD status
|
||||
kill "${pid}" >/dev/null 2>&1
|
||||
wait "${pid}" >/dev/null 2>&1
|
||||
cmd_exit_status="$?"
|
||||
|
||||
# looks for equlity in CMD exit status and one of the given status
|
||||
for i in $STATUS; do
|
||||
if ([ "${cmd_exit_status}" -eq "${i}" ]) >/dev/null 2>&1; then
|
||||
message="finished successfully"
|
||||
EXIT_STATUS=0
|
||||
break 2
|
||||
fi
|
||||
done
|
||||
|
||||
done
|
||||
|
||||
output "${CMD_NAME} ${message} after $(($(date +%s)-TIME_START)) second(s)."
|
||||
output "cmd: ${CMD}"
|
||||
output "target exit status: ${STATUS}"
|
||||
output "exited status: ${cmd_exit_status}"
|
||||
|
||||
exit "${EXIT_STATUS}"
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user