Script im Hintergrund ausführen bei Systemstart


jimb0p

Erfahrenes Mitglied
#1
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
#3
*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
 

ComFreek

Mod | @comfreek
Moderator
#6
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
#7
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
#8
@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.