Script im Hintergrund ausführen bei Systemstart

jimb0p

Erfahrenes Mitglied
Hallo Zusammen,

ich habe schon ein wenig im Internet gesucht aber ich bekomme ein simples script einfach nicht regelmäßig ausgeführt. Inhalt des Scripts:

Code:
#!/bin/sh
nordvpn connect md10

Verbindet einfach zu einem ausgewählten VPN Server, leider kann die VPN App von NordVPN nur Autostart aber nicht auf einen expliziten VPN daher der Umweg über den Systemstart.

Zudem möchte ich meinen Firefox Sync Server automatisch starten, dafür habe ich folgendes Script:

Code:
#!/bin/sh
screen -dmS firefoxSyncServer pserve /opt/syncserver/syncserver.ini

Als root führe ich crontab -e aus und habe folgende Zeilen eingefügt:
Code:
@reboot sh /home/jimb0p/firefoxServer_start.sh
@reboot sh /home/jimb0p/nordvpn_connect.sh

Das Problem ist, manchmal klappt es und manchmal nicht. Ich habe keine Ahnung woran es liegt. Was genau mache ich falsch?

Grüße!
 

Zvoni

Erfahrenes Mitglied
*grmpf*
Sorry, habs übersehen, aber du benutzt ja "... sh /home/blablab"
Manchmal klappt es, manchmal nicht?
Klingt so als ob du eine race-condition hast.
Manchmal ist alles fertig gestartet, was deine Skripte brauchen (dann funktionierts), manchmal nicht.
Müssen deine Skripte irgendwelche Vorbedingungen erfüllen? Also muss "der-und-der" daemon schon laufen?
Ich kann mir vorstellen, dass du mit deinem vpn-skript an eine Wand fährst, wenn dieses an der Reihe ist, ausgeführt zu werden, aber der VPN-daemon noch nicht läuft
 

jimb0p

Erfahrenes Mitglied
Genau. Kann man ggf. Eine Wartezeit einbauen beim cron? Oder soll ich eine ins Skript einbauen?
 

Zvoni

Erfahrenes Mitglied
Hmm, von einem Programmiererstandpunkt hätte ich eher überlegt, zu checken, ob der Prozess, den du brauchst läuft (vielleicht in einer Schleife, mit Abbruchbedingung, damit es keine Endlos-Schleife wird).

Hier mal ein paar Ansätze:
Bash script to check running process
 

ComFreek

Mod | @comfreek
Moderator
Selbst wenn der Prozess läuft, heißt das nicht, dass er sich schon initialisiert hat.

Siehe How do I tell a script to wait for a process to start accepting requests on a port?, insbesondere den ersten Satz der Antwort:
Gilles hat gesagt.:
The best test to see if a server is accepting connections is to actually try connecting.

Eine andere saubere Lösung wäre es, "sich als Callback bei dem Prozess einzutragen." Ich weiß nicht, ob es sowas für deinen Daemon gibt.
 

Zvoni

Erfahrenes Mitglied
Selbst wenn der Prozess läuft, heißt das nicht, dass er sich schon initialisiert hat.

Siehe How do I tell a script to wait for a process to start accepting requests on a port?, insbesondere den ersten Satz der Antwort:


Eine andere saubere Lösung wäre es, "sich als Callback bei dem Prozess einzutragen." Ich weiß nicht, ob es sowas für deinen Daemon gibt.

Du meinst in der Art: Daemon, wenn du fertig gestartet (und initialisiert) bist, benutze diesen Callback und informiere den Empfänger: Feuer frei!
Damit das funzt, müsste der "Empfänger" aber bereits laufen.
Ich hätte vielleicht eher was in der Art dann gesucht: Hat der Daemon eine Möglichkeit, sobald er fertig geladen und initialisiert ist, einen Befehl auszuführen?
Um in dem Szenario zu bleiben:
NordVPN-Daemon startet, ladet und initialisiert sich.
Irgendwann ist er fertig, und erhält intern das Signal "Bin soweit",
führe jetzt den Befehl "sh /home/jimb0p/nordvpn_connect.sh" aus
 

ComFreek

Mod | @comfreek
Moderator
@Zvoni Ja, genau sowas meinte ich ;) Callback in einem etwas weiteren Sinn. Möglicherweise ist das auch als Plugin realisierbar, wenn der jeweilige Daemon/die Software so etwas wie ein Pluginsystem erlaubt.
 

Neue Beiträge