summaryrefslogtreecommitdiffstats
path: root/scripts/ldadp-launcher
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/ldadp-launcher')
-rwxr-xr-xscripts/ldadp-launcher126
1 files changed, 63 insertions, 63 deletions
diff --git a/scripts/ldadp-launcher b/scripts/ldadp-launcher
index 6cd0c3f..f233900 100755
--- a/scripts/ldadp-launcher
+++ b/scripts/ldadp-launcher
@@ -1,12 +1,33 @@
#!/bin/bash
+set -x
+exec 2> /tmp/pops
+
if [ $# -lt 2 ]; then
echo "Invalid parameter count: '$#'" >&2
exit 1
fi
-BASE="$1"
-shift
+BASE="/opt/ldadp"
+MODE="start"
+while [ $# -gt 0 ]; do
+ var="$1"
+ shift
+ case "$var" in
+ --check) MODE="check" ;;
+ --start) MODE="start" ;;
+ --restart) MODE="restart" ;;
+ --base)
+ BASE="$1"
+ shift
+ ;;
+ --) break ;;
+ --*)
+ echo "Unknown option '$var'" >&2
+ exit 1
+ ;;
+ esac
+done
if [ -z "$BASE" ] || [ ! -r "$BASE" ] || [ ! -d "$BASE" ]; then
echo "Basedir invalid: '$BASE'" >&2
@@ -14,8 +35,6 @@ if [ -z "$BASE" ] || [ ! -r "$BASE" ] || [ ! -d "$BASE" ]; then
fi
cd "$BASE"
-[ "x$1" == "x--" ] && shift
-
# At this point $@ should only be ldadp instance ids
inArray () {
@@ -26,71 +45,52 @@ inArray () {
return 1
}
-isInstance () {
- if [ $# -ne 1 ]; then
- echo "isInstance needs 1 param, got $#" >&2
- return 0
- fi
- [ -L "/proc/$1/exe" ] && [ -r "/proc/$1/exe" ] && [[ "$(readlink -f "/proc/$1/exe")" == *ldadp ]] && return 0
- return 1
-}
+RETVAL=0
-launch () {
- local CONFIG="${BASE}/configs/${1}.cfg"
- if [ ! -r "$CONFIG" ]; then
- echo "Told to start ldadp for module '${1}', but no config file found!" >&2
- return 1
- fi
- echo "Launching #$1"
- local LOGFILE="/var/log/ldadp/${1}.log"
- if [ ! -w "/var/log/ldadp" ] || [ -e "$LOGFILE" -a ! -w "$LOGFILE" ]; then
- LOGFILE="/dev/null"
- elif [ -s "$LOGFILE" ]; then
- TFILE=$(mktemp)
- tail -n 50 "$LOGFILE" > "$TFILE"
- echo "----- Starting $(date) -------" >> "$TFILE"
- cat "$TFILE" > "$LOGFILE" # Use cat to preserve permissions of $LOGFILE
- rm -f -- "$TFILE"
- fi
- "${BASE}/ldadp" -n "$CONFIG" >> "$LOGFILE" 2>&1 &
- local P=$!
- sleep 1
- if ! kill -0 "$P" 2>/dev/null; then
- echo "...FAILED to launch #$1" >&2
- return 1
- fi
- echo -n "$P" > "${BASE}/pid/${1}"
- return 0
-}
+if [ "$MODE" = "check" ]; then
+ # Dump list of known instances
+ systemctl list-units --state=loaded --no-legend | awk '{if ($1 ~ /^ldadp@.*\.service$/) print $1 " " $4}'
+ exit "$RETVAL"
+elif [ "$MODE" = "restart" ]; then
+ # Restart only the given ID(s)
+ for id in "$@"; do
+ if ! [ -r "${BASE}/configs/${id}.cfg" ]; then
+ echo "Told to start ldadp for module '${id}', but no config file found; skipping." >&2
+ continue
+ fi
+ name="ldadp@${id}.service"
+ wanted+=( "${name}" )
+ echo "Restarting $name"
+ systemctl restart "$name" || RETVAL=1
+ done
+ exit "$RETVAL"
+fi
-RETVAL=0
+# Regular Start/Stop logic
-for FILE in $(find "$BASE/pid" -type f -regextype posix-extended -regex "(^|.*/)[0-9]+$"); do
- ID=$(basename $FILE)
- PID=$(<$FILE)
- if ! [[ "$PID" =~ ^[0-9]+$ ]]; then
- echo "Invalid PID file: '$FILE'"
- unlink "$FILE"
- fi
- inArray $ID "$@" && isInstance $PID && continue # Should be running, is running, nothing to do
- #
- unlink "$FILE"
- if isInstance $PID; then
- # Is running, should not, kill
- kill $PID
- sleep 1
- isInstance $PID && kill -9 $PID
+# Get loaded instances
+declare -a known wanted
+known=( $(systemctl list-units --state=loaded --no-legend | awk '{if ($1 ~ /^ldadp@.*\.service$/) print $1}') )
+
+# Prepare names of wanted services and launch them
+for id in "$@"; do
+ if ! [ -r "${BASE}/configs/${id}.cfg" ]; then
+ echo "Told to start ldadp for module '${id}', but no config file found; skipping." >&2
+ continue
fi
+ name="ldadp@${id}.service"
+ wanted+=( "${name}" )
+ echo "Starting $name"
+ systemctl enable "$name"
+ systemctl start "$name" || RETVAL=1
done
-while [ $# -gt 0 ]; do
- ID=$1
- shift
- FILE="${BASE}/pid/${ID}"
- [ -r "$FILE" ] && isInstance $(<$FILE) && continue
- launch $ID
- RET=$?
- [ "$RET" != "0" ] && RETVAL=1
+# Now stop the ones we don't need anymore
+for name in "${known[@]}"; do
+ inArray "$name" "${wanted[@]}" && continue
+ echo "Stopping $name"
+ systemctl disable "$name"
+ systemctl stop "$name"
done
exit "$RETVAL"