Automatisches Starten eines SH-Skripts nach Server-Startup?

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.

ntech  21.07.2023, 12:54

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!

2
julihan41  21.07.2023, 13:07
@ntech

Richtig.

Und narrensicher muss es ob systemd oder cron.

1
ntech  21.07.2023, 14:59
@julihan41

Stimmt! in beiden Fällen stimmen mitunter die Pfade nicht wie erwartet 😂

1

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
Woher ich das weiß:eigene Erfahrung
Dinuuu 
Fragesteller
 21.07.2023, 12:50

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.

0
julihan41  21.07.2023, 13:08
@Dinuuu

Was sind das für Programme? Brauchst du die wirklich in screens oder benutzt du das nur, um die Programme zu starten?

0
Dinuuu 
Fragesteller
 21.07.2023, 13:14
@julihan41

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.

0
csxp123  21.07.2023, 13:22
@Dinuuu

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)

0
Waldelb3  21.07.2023, 13:28
@Dinuuu

Persönlich würde ich eher tmux nehmen. Das ist die modernere Alternative zu Screen.

1
deruser1973  21.07.2023, 13:29
@julihan41

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....

2
Dinuuu 
Fragesteller
 21.07.2023, 13:42
@csxp123

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
0
Dinuuu 
Fragesteller
 21.07.2023, 13:44
@deruser1973

Mein Server ist kein Minecraft Server bzw. Netzwerk

0
csxp123  21.07.2023, 17:52
@deruser1973

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.
0

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

Woher ich das weiß:Berufserfahrung – Linux Administrator