First add of threaded start
This commit is contained in:
parent
0efad598d8
commit
1aa697f963
60
bin/start
Executable file → Normal file
60
bin/start
Executable file → Normal file
@ -10,9 +10,6 @@ usage() {
|
|||||||
exit 2
|
exit 2
|
||||||
}
|
}
|
||||||
startservice_jitsi() {
|
startservice_jitsi() {
|
||||||
if [ "$(docker container inspect -f '{{.State.Status}}' jitsi_web_1 2>/dev/null)" = "running" ]; then
|
|
||||||
echo -ne "* $SERVICE is already running.\n"
|
|
||||||
else
|
|
||||||
if [ -z "$ALERTS_EMAIL" ]; then
|
if [ -z "$ALERTS_EMAIL" ]; then
|
||||||
spin &
|
spin &
|
||||||
SPINPID=$!
|
SPINPID=$!
|
||||||
@ -23,7 +20,7 @@ startservice_jitsi() {
|
|||||||
|
|
||||||
disown $SPINPID &> /dev/null
|
disown $SPINPID &> /dev/null
|
||||||
kill -9 $SPINPID &> /dev/null
|
kill -9 $SPINPID &> /dev/null
|
||||||
echo -ne "done.\n"
|
echo -ne "done."
|
||||||
else
|
else
|
||||||
spin &
|
spin &
|
||||||
SPINPID=$!
|
SPINPID=$!
|
||||||
@ -34,18 +31,18 @@ startservice_jitsi() {
|
|||||||
|
|
||||||
disown $SPINPID &> /dev/null
|
disown $SPINPID &> /dev/null
|
||||||
kill -9 $SPINPID &> /dev/null
|
kill -9 $SPINPID &> /dev/null
|
||||||
echo -ne "done.\n"
|
echo -ne "done."
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
startservice() {
|
startservice() {
|
||||||
if [ "$(docker container inspect -f '{{.State.Status}}' $SERVICE 2>/dev/null)" = "running" ]; then
|
echo -ne "* Starting $SERVICE.."
|
||||||
echo -ne "* $SERVICE is already running.\n"
|
|
||||||
else
|
|
||||||
if [ -z "$ALERTS_EMAIL" ]; then
|
if [ -z "$ALERTS_EMAIL" ]; then
|
||||||
|
spin &
|
||||||
|
SPINPID=$!
|
||||||
|
|
||||||
NC_COMMAND=`grep start_service /federated/lib/$SERVICE.sh | awk -F\" '{ print $4 }'`
|
NC_COMMAND=`grep start_service /federated/lib/$SERVICE.sh | awk -F\" '{ print $4 }'`
|
||||||
RETRY=`grep start_service /federated/lib/$SERVICE.sh | awk -F\" '{ print $6 }'`
|
RETRY=`grep start_service /federated/lib/$SERVICE.sh | awk -F\" '{ print $6 }'`
|
||||||
eval start_service_withalert "$SERVICE" "$NC_COMMAND" "$RETRY" "no"
|
start_service_withalert "$SERVICE" "$NC_COMMAND" "$RETRY" "no"
|
||||||
|
|
||||||
disown $SPINPID &> /dev/null
|
disown $SPINPID &> /dev/null
|
||||||
kill -9 $SPINPID &> /dev/null
|
kill -9 $SPINPID &> /dev/null
|
||||||
@ -62,7 +59,6 @@ startservice() {
|
|||||||
kill -9 $SPINPID &> /dev/null
|
kill -9 $SPINPID &> /dev/null
|
||||||
echo -ne "done.\n"
|
echo -ne "done.\n"
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
startservice_all() {
|
startservice_all() {
|
||||||
for SERVICE in "${SERVICES[@]}"; do
|
for SERVICE in "${SERVICES[@]}"; do
|
||||||
@ -70,7 +66,7 @@ startservice_all() {
|
|||||||
[ ! -d "/federated/apps/$SERVICE" ] && echo "* $SERVICE not installed, skipping." && continue
|
[ ! -d "/federated/apps/$SERVICE" ] && echo "* $SERVICE not installed, skipping." && continue
|
||||||
|
|
||||||
FAILED="no"
|
FAILED="no"
|
||||||
if [ "$SERVICE" = "jitsi" ]; then
|
if [ "$SERVICE" = "jitsi" ]; then
|
||||||
if [ "$(docker container inspect -f '{{.State.Status}}' jitsi_web_1 2>/dev/null)" = "running" ]; then
|
if [ "$(docker container inspect -f '{{.State.Status}}' jitsi_web_1 2>/dev/null)" = "running" ]; then
|
||||||
echo -ne "* $SERVICE is already running.\n"
|
echo -ne "* $SERVICE is already running.\n"
|
||||||
else
|
else
|
||||||
@ -86,7 +82,7 @@ startservice_all() {
|
|||||||
|
|
||||||
NC_COMMAND=`grep start_service /federated/lib/$SERVICE.sh | awk -F\" '{ print $4 }'`
|
NC_COMMAND=`grep start_service /federated/lib/$SERVICE.sh | awk -F\" '{ print $4 }'`
|
||||||
RETRY=`grep start_service /federated/lib/$SERVICE.sh | awk -F\" '{ print $6 }'`
|
RETRY=`grep start_service /federated/lib/$SERVICE.sh | awk -F\" '{ print $6 }'`
|
||||||
eval start_service_withalert "$SERVICE" "$NC_COMMAND" "$RETRY" "no"
|
start_service_withalert "$SERVICE" "$NC_COMMAND" "$RETRY" "no"
|
||||||
|
|
||||||
disown $SPINPID &> /dev/null
|
disown $SPINPID &> /dev/null
|
||||||
kill -9 $SPINPID &> /dev/null
|
kill -9 $SPINPID &> /dev/null
|
||||||
@ -97,7 +93,7 @@ startservice_all() {
|
|||||||
|
|
||||||
NC_COMMAND=`grep start_service /federated/lib/$SERVICE.sh | awk -F\" '{ print $4 }'`
|
NC_COMMAND=`grep start_service /federated/lib/$SERVICE.sh | awk -F\" '{ print $4 }'`
|
||||||
RETRY=`grep start_service /federated/lib/$SERVICE.sh | awk -F\" '{ print $6 }'`
|
RETRY=`grep start_service /federated/lib/$SERVICE.sh | awk -F\" '{ print $6 }'`
|
||||||
eval start_service_withalert "$SERVICE" "$NC_COMMAND" "$RETRY" "yes"
|
start_service_withalert "$SERVICE" "$NC_COMMAND" "$RETRY" "yes"
|
||||||
|
|
||||||
disown $SPINPID &> /dev/null
|
disown $SPINPID &> /dev/null
|
||||||
kill -9 $SPINPID &> /dev/null
|
kill -9 $SPINPID &> /dev/null
|
||||||
@ -107,16 +103,48 @@ startservice_all() {
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
startservice_coreapp() {
|
||||||
|
echo "* Starting $1."
|
||||||
|
NC_COMMAND=`grep start_service /federated/lib/$1.sh | awk -F\" '{ print $4 }'`
|
||||||
|
RETRY=`grep start_service /federated/lib/$1.sh | awk -F\" '{ print $6 }'`
|
||||||
|
eval start_service_withalert2 "$1" "$NC_COMMAND" "$RETRY" "no"
|
||||||
|
}
|
||||||
|
startservice_all_new() {
|
||||||
|
echo "* Starting $1."
|
||||||
|
NC_COMMAND=`grep start_service /federated/lib/$1.sh | awk -F\" '{ print $4 }'`
|
||||||
|
RETRY=`grep start_service /federated/lib/$1.sh | awk -F\" '{ print $6 }'`
|
||||||
|
eval start_service_withalert2 "$1" "$NC_COMMAND" "$RETRY" "no"
|
||||||
|
}
|
||||||
|
|
||||||
#get_installedapps
|
|
||||||
[ $# != 1 ] && usage
|
[ $# != 1 ] && usage
|
||||||
SERVICE=$1
|
SERVICE=$1
|
||||||
|
|
||||||
if [ "$SERVICE" = "jitsi" ]; then
|
if [ "$SERVICE" = "jitsi" ]; then
|
||||||
|
# If jitsi is already running then skip
|
||||||
|
[ "$(docker container inspect -f '{{.State.Status}}' jitsi_web_1 2>/dev/null)" = "running" ] && echo "* $SERVICE is already running." && exit 2
|
||||||
startservice_jitsi
|
startservice_jitsi
|
||||||
elif [ "$SERVICE" = "all" ]; then
|
elif [ "$SERVICE" = "all" ]; then
|
||||||
startservice_all
|
# Starting all apps
|
||||||
|
# First start the CORE_APPS one by one
|
||||||
|
for i in "${CORE_APPS[@]}"; do
|
||||||
|
[ ! -d "/federated/apps/$i" ] && echo "* $i not installed, skipping." && continue
|
||||||
|
[ "$(docker container inspect -f '{{.State.Status}}' $i 2>/dev/null)" = "running" ] && echo "* $i is already started." && continue
|
||||||
|
startservice_coreapp "$i"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Next start EXTRA_APPS in parallel
|
||||||
|
for i in "${EXTRA_APPS[@]}"; do
|
||||||
|
[ ! -d "/federated/apps/$i" ] && echo "* $i not installed, skipping." && continue
|
||||||
|
[ "$(docker container inspect -f '{{.State.Status}}' $i 2>/dev/null)" = "running" ] && echo "* $i is already started." && continue
|
||||||
|
[ "$i" = "jitsi" ] && [ "$(docker container inspect -f '{{.State.Status}}' jitsi_web_1 2>/dev/null)" = "running" ] && echo "* $i is already started." && continue
|
||||||
|
startservice_all_new "$i" &
|
||||||
|
done
|
||||||
|
|
||||||
|
wait
|
||||||
|
exit 0
|
||||||
elif printf '%s\0' "${SERVICES[@]}" | grep -Fxqz -- "$SERVICE"; then
|
elif printf '%s\0' "${SERVICES[@]}" | grep -Fxqz -- "$SERVICE"; then
|
||||||
|
# If app is already running then skip
|
||||||
|
[ "$(docker container inspect -f '{{.State.Status}}' $SERVICE 2>/dev/null)" = "running" ] && echo "* $SERVICE is already running." && exit 2
|
||||||
startservice
|
startservice
|
||||||
else
|
else
|
||||||
usage
|
usage
|
||||||
|
123
bin/start.old
Executable file
123
bin/start.old
Executable file
@ -0,0 +1,123 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Federated Start Script
|
||||||
|
. /federated/lib/functions.sh
|
||||||
|
. /etc/federated
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
printf -v SERVICES_JOINED '%s|' "${SERVICES[@]}"
|
||||||
|
echo "$0: ${SERVICES_JOINED%|}"
|
||||||
|
exit 2
|
||||||
|
}
|
||||||
|
startservice_jitsi() {
|
||||||
|
if [ "$(docker container inspect -f '{{.State.Status}}' jitsi_web_1 2>/dev/null)" = "running" ]; then
|
||||||
|
echo -ne "* $SERVICE is already running.\n"
|
||||||
|
else
|
||||||
|
if [ -z "$ALERTS_EMAIL" ]; then
|
||||||
|
spin &
|
||||||
|
SPINPID=$!
|
||||||
|
|
||||||
|
NC_COMMAND=`grep start_service /federated/lib/$SERVICE.sh | awk -F\" '{ print $4 }'`
|
||||||
|
RETRY=`grep start_service /federated/lib/jitsi.sh | awk -F\" '{ print $6 }'`
|
||||||
|
start_service_withalert "jitsi" "$NC_COMMAND" "$RETRY" "no"
|
||||||
|
|
||||||
|
disown $SPINPID &> /dev/null
|
||||||
|
kill -9 $SPINPID &> /dev/null
|
||||||
|
echo -ne "done.\n"
|
||||||
|
else
|
||||||
|
spin &
|
||||||
|
SPINPID=$!
|
||||||
|
|
||||||
|
NC_COMMAND=`grep start_service /federated/lib/$SERVICE.sh | awk -F\" '{ print $4 }'`
|
||||||
|
RETRY=`grep start_service /federated/lib/jitsi.sh | awk -F\" '{ print $6 }'`
|
||||||
|
start_service_withalert "$SERVICE" "$NC_COMMAND" "$RETRY" "yes"
|
||||||
|
|
||||||
|
disown $SPINPID &> /dev/null
|
||||||
|
kill -9 $SPINPID &> /dev/null
|
||||||
|
echo -ne "done.\n"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
startservice() {
|
||||||
|
if [ "$(docker container inspect -f '{{.State.Status}}' $SERVICE 2>/dev/null)" = "running" ]; then
|
||||||
|
echo -ne "* $SERVICE is already running.\n"
|
||||||
|
else
|
||||||
|
if [ -z "$ALERTS_EMAIL" ]; then
|
||||||
|
NC_COMMAND=`grep start_service /federated/lib/$SERVICE.sh | awk -F\" '{ print $4 }'`
|
||||||
|
RETRY=`grep start_service /federated/lib/$SERVICE.sh | awk -F\" '{ print $6 }'`
|
||||||
|
eval start_service_withalert "$SERVICE" "$NC_COMMAND" "$RETRY" "no"
|
||||||
|
|
||||||
|
disown $SPINPID &> /dev/null
|
||||||
|
kill -9 $SPINPID &> /dev/null
|
||||||
|
echo -ne "done."
|
||||||
|
else
|
||||||
|
spin &
|
||||||
|
SPINPID=$!
|
||||||
|
|
||||||
|
NC_COMMAND=`grep start_service /federated/lib/$SERVICE.sh | awk -F\" '{ print $4 }'`
|
||||||
|
RETRY=`grep start_service /federated/lib/$SERVICE.sh | awk -F\" '{ print $6 }'`
|
||||||
|
eval start_service_withalert "$SERVICE" "$NC_COMMAND" "$RETRY" "yes"
|
||||||
|
|
||||||
|
disown $SPINPID &> /dev/null
|
||||||
|
kill -9 $SPINPID &> /dev/null
|
||||||
|
echo -ne "done.\n"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
startservice_all() {
|
||||||
|
for SERVICE in "${SERVICES[@]}"; do
|
||||||
|
# If app isn't installed then skip
|
||||||
|
[ ! -d "/federated/apps/$SERVICE" ] && echo "* $SERVICE not installed, skipping." && continue
|
||||||
|
|
||||||
|
FAILED="no"
|
||||||
|
if [ "$SERVICE" = "jitsi" ]; then
|
||||||
|
if [ "$(docker container inspect -f '{{.State.Status}}' jitsi_web_1 2>/dev/null)" = "running" ]; then
|
||||||
|
echo -ne "* $SERVICE is already running.\n"
|
||||||
|
else
|
||||||
|
startservice_jitsi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [ "$(docker container inspect -f '{{.State.Status}}' $SERVICE 2>/dev/null)" = "running" ]; then
|
||||||
|
echo -ne "* $SERVICE is already running.\n"
|
||||||
|
else
|
||||||
|
if [ -z "$ALERTS_EMAIL" ]; then
|
||||||
|
spin &
|
||||||
|
SPINPID=$!
|
||||||
|
|
||||||
|
NC_COMMAND=`grep start_service /federated/lib/$SERVICE.sh | awk -F\" '{ print $4 }'`
|
||||||
|
RETRY=`grep start_service /federated/lib/$SERVICE.sh | awk -F\" '{ print $6 }'`
|
||||||
|
eval start_service_withalert "$SERVICE" "$NC_COMMAND" "$RETRY" "no"
|
||||||
|
|
||||||
|
disown $SPINPID &> /dev/null
|
||||||
|
kill -9 $SPINPID &> /dev/null
|
||||||
|
echo -ne "done.\n"
|
||||||
|
else
|
||||||
|
spin &
|
||||||
|
SPINPID=$!
|
||||||
|
|
||||||
|
NC_COMMAND=`grep start_service /federated/lib/$SERVICE.sh | awk -F\" '{ print $4 }'`
|
||||||
|
RETRY=`grep start_service /federated/lib/$SERVICE.sh | awk -F\" '{ print $6 }'`
|
||||||
|
eval start_service_withalert "$SERVICE" "$NC_COMMAND" "$RETRY" "yes"
|
||||||
|
|
||||||
|
disown $SPINPID &> /dev/null
|
||||||
|
kill -9 $SPINPID &> /dev/null
|
||||||
|
echo -ne "done.\n"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
#get_installedapps
|
||||||
|
[ $# != 1 ] && usage
|
||||||
|
SERVICE=$1
|
||||||
|
|
||||||
|
if [ "$SERVICE" = "jitsi" ]; then
|
||||||
|
startservice_jitsi
|
||||||
|
elif [ "$SERVICE" = "all" ]; then
|
||||||
|
startservice_all
|
||||||
|
elif printf '%s\0' "${SERVICES[@]}" | grep -Fxqz -- "$SERVICE"; then
|
||||||
|
startservice
|
||||||
|
else
|
||||||
|
usage
|
||||||
|
fi
|
@ -1,7 +1,9 @@
|
|||||||
# Federated Computer functions
|
# Federated Computer functions
|
||||||
|
|
||||||
# Define all services
|
# Define all services
|
||||||
SERVICES=("pdnsmysql" "pdns" "pdnsadmin" "traefik" "postgresql" "ldap" "mail" "collabora" "nextcloud" "matrix" "element" "listmonk" "vaultwarden" "panel" "wireguard" "jitsi" "baserow" "gitea" "caddy" "autodiscover" "castopod" "wordpress" "coturn" "bookstack" "freescout" "msp" "espocrm" "nginx" "matrixslack" "matrixsignal" "matrixwhatsapp")
|
CORE_APPS=("pdnsmysql" "pdns" "pdnsadmin" "traefik" "postgresql" "ldap")
|
||||||
|
EXTRA_APPS=("mail" "collabora" "nextcloud" "matrix" "element" "listmonk" "vaultwarden" "panel" "wireguard" "jitsi" "baserow" "gitea" "caddy" "autodiscover" "castopod" "wordpress" "coturn" "bookstack" "freescout" "msp" "espocrm" "nginx" "matrixslack" "matrixsignal" "matrixwhatsapp")
|
||||||
|
SERVICES=("${CORE_APPS[@]}" "${EXTRA_APPS[@]}")
|
||||||
|
|
||||||
fail() {
|
fail() {
|
||||||
echo -ne "FAILED\n\n$1\n\n"
|
echo -ne "FAILED\n\n$1\n\n"
|
||||||
@ -186,6 +188,44 @@ start_service_upgrade() {
|
|||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
start_service_withalert2() {
|
||||||
|
SERVICE="$1"
|
||||||
|
COMMAND="$2"
|
||||||
|
RETRY="$3"
|
||||||
|
ALERT="$4"
|
||||||
|
|
||||||
|
# First start the service
|
||||||
|
docker-compose -f /federated/apps/$SERVICE/docker-compose.yml -p $SERVICE up -d &> /dev/null
|
||||||
|
|
||||||
|
# Keep trying service COMMAND to make sure it's up before we proceed
|
||||||
|
while [ "$RETRY" -gt "0" ]; do
|
||||||
|
bash -c "eval $COMMAND" &> /dev/null
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
break
|
||||||
|
else
|
||||||
|
# When RETRY gets down to 1 then we have failed
|
||||||
|
if [ "$RETRY" == 1 ]; then
|
||||||
|
# disown $SPINPID &> /dev/null
|
||||||
|
# kill -9 $SPINPID &> /dev/null
|
||||||
|
FAILED="yes"
|
||||||
|
|
||||||
|
if [ "$ALERT" = "yes" ]; then
|
||||||
|
EXTERNALIP=`dig @resolver4.opendns.com myip.opendns.com +short 2> /dev/null`
|
||||||
|
docker-compose -f /federated/apps/$SERVICE/docker-compose.yml -p $SERVICE down &> /dev/null
|
||||||
|
echo "Generated by /federated/bin/start" > /federated/apps/mail/data/root/certs/mailfile
|
||||||
|
docker exec mail bash -c "mail -r admin@$DOMAIN -a \"Content-type: text/html\" -s \"$SERVICE failed to start on $EXTERNALIP\" $ALERTS_EMAIL < /root/certs/mailfile"
|
||||||
|
echo -ne "\nThere was a problem starting service /federated/apps/$SERVICE\nCheck the output of 'docker logs $SERVICE' while starting or run\ndocker-compose -f /federated/apps/$SERVICE/docker-compose.yml -p $SERVICE up\n"
|
||||||
|
else
|
||||||
|
docker-compose -f /federated/apps/$SERVICE/docker-compose.yml -p $SERVICE down &> /dev/null
|
||||||
|
echo -ne "\nThere was a problem starting service /federated/apps/$SERVICE\nCheck the output of 'docker logs $SERVICE' while starting or run\ndocker-compose -f /federated/apps/$SERVICE/docker-compose.yml -p $SERVICE up\n"
|
||||||
|
fi
|
||||||
|
echo -ne "\n"
|
||||||
|
fi
|
||||||
|
((RETRY--))
|
||||||
|
sleep 7
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
start_service_withalert() {
|
start_service_withalert() {
|
||||||
SERVICE="$1"
|
SERVICE="$1"
|
||||||
COMMAND="$2"
|
COMMAND="$2"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user