Automatisches Starten eines SH-Skripts nach Server-Startup?
Wie kann ich ein SH-Skript automatisch nach dem Start des Servers in debian automatisch ausführen lassen?
4 Antworten
Ich würde das über eine Systemd Unit lösen.
https://wiki.ubuntuusers.de/systemd/Service_Units/
Dabei kann man bspw auch einstellen, dass das Skript oder Programm neu startet, wenn es beendet werden sollte - bspw nach einen Fehler.
Stimmt! in beiden Fällen stimmen mitunter die Pfade nicht wie erwartet 😂
Da gibt es verschiedene Ansätze.
Ich persönlich benutze einfach crontab
Per 'crontab -e' die Crontab Konfiguration aufrufen und dann eine Zeile mit dem Eintrag @reboot hinzufügen
Beispiel
@reboot /usr/bin/sh PFAD/ZUR/DATEI.sh
Mein Skript soll 3 Screens öffnen, die dann ihr jeweiliges Programm öffnen. Nachdem ich dies eingetragen und einmal neu gestartet habe, haben sich 2 von 3 Screens geöffnet. Die 2 geöffneten Screens haben zwar die Programme gestartet, aber geben eine Fehlermeldung.
Ich benutze Screens, um die Programme zu starten und sie später im gestarteten Zustand wieder zu öffnen, ohne 24/7 im Terminal zu sein.
Ich mache das selbe
Hier ein Beispielscript wie ich meine Discord-Bots starte, falls dir das hilft:
@reboot /usr/bin/screen -m -d -S musicbot java -jar ~/musicbot.jar
@reboot /usr/bin/screen -m -d -S devbot java -jar ~/devbot.jar
"-m -d" um den Screen detached im Hintergrund zu starten, -S um den Namen des Screens festzulegen, gefolgt von dem auszuführendem Befehl. Bei dir dann eben die Ausführung der sh-Skripte (bzw. der Programme)
Ich würde doch mal raten - es geht um 3 Minecraft Server, die zusammen im Bungee Cord Verbund, ein Minecraft Netzwerk darstellen sollen...
Hier geht's eigentlich immer um Minecraft - wenn ich schon "Screen" lese....
Bei mir werden die Screens nicht erstellt.
Ich habe Folgendes eingeben:
@reboot /usr/bin/screen -m -d -S Twitch python3.10 /root/twitch/run.py
@reboot /usr/bin/screen -m -d -S Youtube ./root/youtube/start.sh
@reboot /usr/bin/screen -m -d -S Sydney ./root/sydney/start.sh
Mein Server ist kein Minecraft Server bzw. Netzwerk
Hat er doch gesagt
Ich benutze Screens, um die Programme zu starten und sie später im gestarteten Zustand wieder zu öffnen, ohne 24/7 im Terminal zu sein.
Zum Beispiel über einen crontab Eintrag mit der "Zeitkennung" @reboot. Beispiel:
@reboot /bin/echo "Dies ist der @reboot Eintrag" >>/tmp/cron.reboot.log 2>&1
https://wiki.ubuntuusers.de/Cron/
Scripts die Zeitgemäß gesteuert werden erledigt man mit Cron Systemweit
für den Benutzer selbst Anacron
Das ist die übliche Methode. Es gibt reichlich Anleitungen. Zu beachten ist, ob es sich bei dem Shellscript um einen "One-Shot" oder einen Daemon handelt. Beide werden ein bisschen unterschiedlich behandelt.
Und natürlich: Das Script muss narrensicher laufen!