70 строки
1.5 KiB
Bash
70 строки
1.5 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ENV_FILE="${ENV_FILE:-/etc/xlx/xlxd.env}"
|
|
if [[ -f "$ENV_FILE" ]]; then
|
|
# shellcheck disable=SC1090
|
|
source "$ENV_FILE"
|
|
fi
|
|
|
|
XLX_INSTALL_PATH="${XLX_INSTALL_PATH:-/xlxd}"
|
|
XLX_LOG_PATH="${XLX_LOG_PATH:-/var/log/xlxd.log}"
|
|
XLX_MODULES="${XLX_MODULES:-ABCDEFGHIJKLMNOPQRSTUVWXYZ}"
|
|
PID_FILE="/var/run/xlxd.pid"
|
|
|
|
usage() {
|
|
echo "Usage: xlx-control {start|stop|restart|status|render-modules}"
|
|
}
|
|
|
|
render_modules() {
|
|
mkdir -p "$XLX_INSTALL_PATH"
|
|
local module_file="$XLX_INSTALL_PATH/xlxd.module"
|
|
: > "$module_file"
|
|
local i char
|
|
for ((i = 0; i < ${#XLX_MODULES}; i++)); do
|
|
char="${XLX_MODULES:$i:1}"
|
|
printf "%s\n" "$char" >> "$module_file"
|
|
done
|
|
}
|
|
|
|
start() {
|
|
render_modules
|
|
if [[ -f "$PID_FILE" ]] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then
|
|
echo "xlxd already running with pid $(cat "$PID_FILE")"
|
|
exit 0
|
|
fi
|
|
|
|
mkdir -p "$(dirname "$XLX_LOG_PATH")"
|
|
cd "$XLX_INSTALL_PATH"
|
|
./xlxd -d -p "$PID_FILE" >> "$XLX_LOG_PATH" 2>&1
|
|
}
|
|
|
|
stop() {
|
|
if [[ -f "$PID_FILE" ]] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then
|
|
kill "$(cat "$PID_FILE")"
|
|
rm -f "$PID_FILE"
|
|
return
|
|
fi
|
|
|
|
pkill -f "$XLX_INSTALL_PATH/xlxd" || true
|
|
rm -f "$PID_FILE"
|
|
}
|
|
|
|
status() {
|
|
if [[ -f "$PID_FILE" ]] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then
|
|
echo "xlxd is running with pid $(cat "$PID_FILE")"
|
|
exit 0
|
|
fi
|
|
echo "xlxd is not running"
|
|
exit 3
|
|
}
|
|
|
|
case "${1:-}" in
|
|
start) start ;;
|
|
stop) stop ;;
|
|
restart) stop; start ;;
|
|
status) status ;;
|
|
render-modules) render_modules ;;
|
|
*) usage; exit 2 ;;
|
|
esac
|