Wiki-Quellcode von Script zum start der beiden Bots
Zuletzt geändert von René Schmidt am 2025/10/28 20:41
Zeige letzte Bearbeiter
| author | version | line-number | content |
|---|---|---|---|
| 1 | ./venv/bin/python Umgebung wird genutzt | ||
| 2 | |||
| 3 | |||
| 4 | |||
| 5 | |||
| 6 | cat > ~~/bots.sh <<'EOF' | ||
| 7 | #!/usr/bin/env bash | ||
| 8 | set -euo pipefail | ||
| 9 | cd "$(dirname "$0")" | ||
| 10 | |||
| 11 | # Projekte (liegen direkt unter ~~) | ||
| 12 | JEAN_DIR="jean-matrix-bot-complete" | ||
| 13 | TERR_DIR="terry_bot_github" | ||
| 14 | |||
| 15 | # Optional: Env-Vars je Bot (falls JEAN z.B. Matrix-Login braucht) | ||
| 16 | JEAN_ENV='' # z.B.: 'export MATRIX_HOMESERVER=https:~/~/... MATRIX_USER=@...:... MATRIX_PASSWORD=...' | ||
| 17 | TERR_ENV='' | ||
| 18 | |||
| 19 | LOG_DIR="logs"; PID_DIR="pids" | ||
| 20 | mkdir -p "$LOG_DIR" "$PID_DIR" | ||
| 21 | JEAN_LOG="$LOG_DIR/jean.log"; TERRY_LOG="$LOG_DIR/terry.log" | ||
| 22 | JEAN_PID="$PID_DIR/jean.pid"; TERRY_PID="$PID_DIR/terry.pid" | ||
| 23 | |||
| 24 | is_running(){ ~[~[ -f "$1" ]] && kill -0 "$(cat "$1" 2>/dev/null)" 2>/dev/null; } | ||
| 25 | |||
| 26 | require_py(){ | ||
| 27 | local proj="$1" | ||
| 28 | local py="$proj/venv/bin/python" | ||
| 29 | if ~[~[ ! -x "$py" ]]; then | ||
| 30 | echo "FEHLER: $py fehlt oder ist nicht ausführbar." | ||
| 31 | echo "Fix: venv (neu) bauen:" | ||
| 32 | echo " cd '$proj' && rm -rf venv && python3 -m venv venv && source venv/bin/activate && pip install -r requirements.txt" | ||
| 33 | return 1 | ||
| 34 | fi | ||
| 35 | } | ||
| 36 | |||
| 37 | start_one(){ | ||
| 38 | local name="$1" proj="$2" log="$3" pid="$4" envvars="$5" entry="$6" | ||
| 39 | if is_running "$pid"; then echo "$name läuft bereits (PID $(cat "$pid"))."; return 0; fi | ||
| 40 | require_py "$proj" || { echo "$name Start abgebrochen."; return 1; } | ||
| 41 | { | ||
| 42 | echo "===== $name START $(date) =====" | ||
| 43 | echo "+ run: cd '$proj' && $envvars exec ./venv/bin/python $entry" | ||
| 44 | echo "+ py: $("$proj/venv/bin/python" -V 2>&1 || true)" | ||
| 45 | } >>"$log" | ||
| 46 | nohup bash -lc "cd '$proj' && $envvars exec ./venv/bin/python $entry" >>"$log" 2>&1 & echo $! >"$pid" | ||
| 47 | sleep 0.8 | ||
| 48 | if is_running "$pid"; then | ||
| 49 | echo "Gestartet: $name (PID $(cat "$pid")) → Log: $log" | ||
| 50 | else | ||
| 51 | echo "FEHLER: $name konnte nicht gestartet werden. Letzte Log-Zeilen:" >&2 | ||
| 52 | tail -n 60 "$log" >&2 || true | ||
| 53 | rm -f "$pid" | ||
| 54 | return 1 | ||
| 55 | fi | ||
| 56 | } | ||
| 57 | |||
| 58 | stop_one(){ | ||
| 59 | local name="$1" pid="$2" | ||
| 60 | if ! is_running "$pid"; then echo "$name ist nicht aktiv."; rm -f "$pid"; return 0; fi | ||
| 61 | local p; p="$(cat "$pid")"; echo -n "Stoppe $name (PID $p)… " | ||
| 62 | kill "$p" 2>/dev/null || true | ||
| 63 | for _ in {1..20}; do kill -0 "$p" 2>/dev/null || { echo "ok"; rm -f "$pid"; return 0; }; sleep 0.5; done | ||
| 64 | echo "kill -9"; kill -9 "$p" 2>/dev/null || true; rm -f "$pid" | ||
| 65 | } | ||
| 66 | |||
| 67 | case "${1:-}" in | ||
| 68 | start) | ||
| 69 | err=0 | ||
| 70 | start_one "JEAN" "$JEAN_DIR" "$JEAN_LOG" "$JEAN_PID" "$JEAN_ENV" "-m jean.core.bot" || err=1 | ||
| 71 | start_one "TERRY" "$TERR_DIR" "$TERRY_LOG" "$TERRY_PID" "$TERR_ENV" "bot.py" || err=1 | ||
| 72 | exit $err | ||
| 73 | ;; | ||
| 74 | stop) | ||
| 75 | stop_one "JEAN" "$JEAN_PID" | ||
| 76 | stop_one "TERRY" "$TERRY_PID" | ||
| 77 | ;; | ||
| 78 | restart) | ||
| 79 | "$0" stop || true | ||
| 80 | "$0" start | ||
| 81 | ;; | ||
| 82 | status) | ||
| 83 | if is_running "$JEAN_PID"; then echo "✓ JEAN läuft (PID $(cat "$JEAN_PID")) — $JEAN_LOG"; else echo "✗ JEAN läuft nicht"; fi | ||
| 84 | if is_running "$TERRY_PID"; then echo "✓ TERRY läuft (PID $(cat "$TERRY_PID")) — $TERRY_LOG"; else echo "✗ TERRY läuft nicht"; fi | ||
| 85 | ;; | ||
| 86 | logs) | ||
| 87 | touch "$JEAN_LOG" "$TERRY_LOG" | ||
| 88 | tail -f "$JEAN_LOG" "$TERRY_LOG" | ||
| 89 | ;; | ||
| 90 | *) | ||
| 91 | echo "Verwendung: $0 {start|stop|restart|status|logs}"; exit 1;; | ||
| 92 | esac | ||
| 93 | EOF | ||
| 94 | |||
| 95 | |||
| 96 | |||
| 97 | __//**Alte Logs/PIDs löschen, Syntax prüfen, starten:**//__ | ||
| 98 | |||
| 99 | |||
| 100 | rm -f ~~/logs/*.log ~~/pids/*.pid 2>/dev/null || true | ||
| 101 | sed -i 's/\r$~/~/' ~~/bots.sh | ||
| 102 | bash -n ~~/bots.sh | ||
| 103 | chmod +x ~~/bots.sh | ||
| 104 | |||
| 105 | # Start & Status ansehen | ||
| 106 | bash ~~/bots.sh restart | ||
| 107 | bash ~~/bots.sh status | ||
| 108 | bash ~~/bots.sh logs | ||
| 109 | |||
| 110 | |||
| 111 | bash ~~/bots.sh restart | ||
| 112 | bash ~~/bots.sh status | ||
| 113 | bash ~~/bots.sh logs | ||
| 114 | |||
| 115 | |||
| 116 | |||
| 117 |