Add autostart.sh -- systemd service lifecycle management script
Enables/disables/reports status for bigbrother-core, bigbrother-capture, and bigbrother-watchdog. Supports enable (enable+start), disable (stop+disable), and status commands. Works locally on-device and over SSH from operator machine.
This commit is contained in:
Executable
+174
@@ -0,0 +1,174 @@
|
||||
#!/usr/bin/env bash
|
||||
# BigBrother autostart -- Enable/disable auto-start on boot
|
||||
# Manages: bigbrother-core, bigbrother-capture, bigbrother-watchdog
|
||||
#
|
||||
# Usage: autostart.sh enable | disable | status
|
||||
set -euo pipefail
|
||||
|
||||
# ── Colors ──────────────────────────────────────────────────────────────────
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
CYAN='\033[0;36m'
|
||||
BOLD='\033[1m'
|
||||
NC='\033[0m'
|
||||
|
||||
info() { echo -e "${GREEN}[+]${NC} $*"; }
|
||||
warn() { echo -e "${YELLOW}[!]${NC} $*"; }
|
||||
error() { echo -e "${RED}[-]${NC} $*"; }
|
||||
step() { echo -e "${CYAN}[*]${NC} ${BOLD}$*${NC}"; }
|
||||
|
||||
die() { error "$*"; exit 1; }
|
||||
|
||||
# ── Service list ─────────────────────────────────────────────────────────────
|
||||
SERVICES=(
|
||||
bigbrother-core.service
|
||||
bigbrother-capture.service
|
||||
bigbrother-watchdog.service
|
||||
)
|
||||
|
||||
# ── Root check ───────────────────────────────────────────────────────────────
|
||||
require_root() {
|
||||
[[ $EUID -eq 0 ]] || die "Must be run as root (try: sudo $0 $*)"
|
||||
}
|
||||
|
||||
# ── Usage ─────────────────────────────────────────────────────────────────────
|
||||
usage() {
|
||||
echo "Usage: $0 <command>"
|
||||
echo ""
|
||||
echo "Commands:"
|
||||
echo " enable -- Enable and start all BigBrother services at boot"
|
||||
echo " disable -- Disable and stop all BigBrother services"
|
||||
echo " status -- Show enabled/running state of all services"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# ── Helpers ──────────────────────────────────────────────────────────────────
|
||||
svc_is_enabled() {
|
||||
systemctl is-enabled "$1" 2>/dev/null | grep -q "^enabled$"
|
||||
}
|
||||
|
||||
svc_is_active() {
|
||||
systemctl is-active "$1" 2>/dev/null | grep -q "^active$"
|
||||
}
|
||||
|
||||
print_service_status() {
|
||||
local svc="$1"
|
||||
local enabled_label active_label
|
||||
|
||||
if svc_is_enabled "$svc"; then
|
||||
enabled_label="${GREEN}enabled${NC}"
|
||||
else
|
||||
enabled_label="${RED}disabled${NC}"
|
||||
fi
|
||||
|
||||
if svc_is_active "$svc"; then
|
||||
active_label="${GREEN}running${NC}"
|
||||
else
|
||||
active_label="${YELLOW}stopped${NC}"
|
||||
fi
|
||||
|
||||
printf " %-36s enabled=%-18b active=%b\n" \
|
||||
"$svc" "$enabled_label" "$active_label"
|
||||
}
|
||||
|
||||
# ── Commands ──────────────────────────────────────────────────────────────────
|
||||
cmd_enable() {
|
||||
require_root enable
|
||||
step "Enabling BigBrother services for auto-start..."
|
||||
|
||||
for svc in "${SERVICES[@]}"; do
|
||||
# Check the unit file exists before attempting to enable
|
||||
if ! systemctl cat "$svc" &>/dev/null; then
|
||||
warn "$svc unit file not found -- skipping (run setup.sh first?)"
|
||||
continue
|
||||
fi
|
||||
|
||||
info "Enabling $svc..."
|
||||
systemctl enable "$svc" 2>&1 || warn " enable failed for $svc"
|
||||
|
||||
info "Starting $svc..."
|
||||
systemctl start "$svc" 2>&1 || warn " start failed for $svc (check: journalctl -u $svc)"
|
||||
done
|
||||
|
||||
echo ""
|
||||
step "Post-enable status"
|
||||
for svc in "${SERVICES[@]}"; do
|
||||
print_service_status "$svc"
|
||||
done
|
||||
|
||||
echo ""
|
||||
info "BigBrother will start automatically on next boot"
|
||||
}
|
||||
|
||||
cmd_disable() {
|
||||
require_root disable
|
||||
step "Disabling BigBrother services..."
|
||||
|
||||
for svc in "${SERVICES[@]}"; do
|
||||
if ! systemctl cat "$svc" &>/dev/null; then
|
||||
warn "$svc unit file not found -- skipping"
|
||||
continue
|
||||
fi
|
||||
|
||||
info "Stopping $svc..."
|
||||
systemctl stop "$svc" 2>&1 || warn " stop failed for $svc (may already be stopped)"
|
||||
|
||||
info "Disabling $svc..."
|
||||
systemctl disable "$svc" 2>&1 || warn " disable failed for $svc"
|
||||
done
|
||||
|
||||
echo ""
|
||||
step "Post-disable status"
|
||||
for svc in "${SERVICES[@]}"; do
|
||||
print_service_status "$svc"
|
||||
done
|
||||
|
||||
echo ""
|
||||
info "BigBrother will NOT start automatically on next boot"
|
||||
}
|
||||
|
||||
cmd_status() {
|
||||
step "BigBrother service status"
|
||||
echo ""
|
||||
for svc in "${SERVICES[@]}"; do
|
||||
print_service_status "$svc"
|
||||
done
|
||||
echo ""
|
||||
|
||||
# Summary line
|
||||
local enabled_count=0
|
||||
local running_count=0
|
||||
for svc in "${SERVICES[@]}"; do
|
||||
svc_is_enabled "$svc" && ((enabled_count++)) || true
|
||||
svc_is_active "$svc" && ((running_count++)) || true
|
||||
done
|
||||
|
||||
local total=${#SERVICES[@]}
|
||||
if [[ $enabled_count -eq $total ]]; then
|
||||
info "Auto-start: ${GREEN}ON${NC} (${enabled_count}/${total} enabled)"
|
||||
elif [[ $enabled_count -eq 0 ]]; then
|
||||
info "Auto-start: ${RED}OFF${NC} (${enabled_count}/${total} enabled)"
|
||||
else
|
||||
warn "Auto-start: partial (${enabled_count}/${total} enabled)"
|
||||
fi
|
||||
|
||||
if [[ $running_count -eq $total ]]; then
|
||||
info "Running: ${GREEN}YES${NC} (${running_count}/${total} active)"
|
||||
elif [[ $running_count -eq 0 ]]; then
|
||||
info "Running: ${RED}NO${NC} (${running_count}/${total} active)"
|
||||
else
|
||||
warn "Running: partial (${running_count}/${total} active)"
|
||||
fi
|
||||
}
|
||||
|
||||
# ── Main ─────────────────────────────────────────────────────────────────────
|
||||
[[ $# -ge 1 ]] || usage
|
||||
|
||||
case "$1" in
|
||||
enable) cmd_enable ;;
|
||||
disable) cmd_disable ;;
|
||||
status) cmd_status ;;
|
||||
-h|--help) usage ;;
|
||||
*) error "Unknown command: $1"; usage ;;
|
||||
esac
|
||||
Reference in New Issue
Block a user