# Script im Hintergrund ausführen bei Systemstart



## jimb0p (2. März 2019)

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:


```
#!/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:


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

Als root führe ich crontab -e aus und habe folgende Zeilen eingefügt:

```
@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 (2. März 2019)

Hast du im dconf-editor die Einstellung auf "Launch"?


----------



## Zvoni (4. März 2019)

*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 (4. März 2019)

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


----------



## Zvoni (4. März 2019)

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 (5. März 2019)

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 (5. März 2019)

ComFreek hat gesagt.:


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



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 (5. März 2019)

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


----------



## Zvoni (6. März 2019)

Hmm, wenn ich dich recht verstanden habe, also sowas hier (Ist für OpenVPN):
Security-Level 2 und Option "up"
How do I run a script after OpenVPN has connected successfully?


----------

