init.d: ​​Wie starte ich einen Dienst in init.d, wenn die Netzwerkverbindung vollständig funktioniert?

init.d: ​​Wie starte ich einen Dienst in init.d, wenn die Netzwerkverbindung vollständig funktioniert?

Ich habe ein Python-Skript, das einen RESTful-Dienst bereitstellt (unter Verwendung des Flask-Frameworks). Mit diesem Dienst möchte ich erreichen, dass er die neueste Version des Python-Skripts klont und dann main.py startet.

Mir ist klar, dass es auf Init-Level 3 gestartet werden könnte, ich bin mir jedoch nicht sicher, wie genau die Init-Informationen konfiguriert werden müssen, und ich bin mir auch nicht sicher, ob es in Ordnung ist, die Crontab mit

sudo update-rc.d myservice enable 3

was wirklich in meinem Service-Skript steht, ist etwa:

#!/bin/sh
rm -fR /home/pi/myservicedir
git clone https://repo/code.git /home/pi/myservicedir
cd /home/pi/myservicedir
python main.py

Antwort1

Ihr Skript ist kein richtiges init.dSkript. Möglicherweise gibt es eine Vorlagendatei, /etc/init.ddie Sie zum Erstellen Ihres Startskripts verwenden können. Andernfalls sehen Sie sich einige der anderen Skripte an, /etc/init.dum das von Ihrer Distribution verwendete Muster zu finden.

Alternativ rc.localwird normalerweise sehr spät im Startzyklus ausgeführt. Dies wäre ein geeigneter Ort, um Ihren Startcode einzufügen. Überprüfen Sie den Wert von, $1bevor startSie Ihren Code ausführen.

Die Server werden in der in aufgeführten Reihenfolge gestartet /etc/rc3.d. Kill-Skripte Kwerden zuerst in lexikalischer Reihenfolge ausgeführt, dann werden die Start-Skripte Sin lexikalischer Reihenfolge ausgeführt. Wenn Sie sicher sein möchten, dass alles ausgeführt wird, verwenden Sie eine Startreihenfolge von 99.

Ihre Distribution sollte über eine Methode zum Installieren und Entfernen von Links in den rc#.dVerzeichnissen verfügen. In Ihrem Fall scheint dies der Fall zu sein update-rc.d. Dies wird normalerweise durch Kommentarzeilen oben im init.dSkript gesteuert.

Es sollten manSeiten mit Beschreibungen der benötigten Programme und Dateien vorhanden sein. Versuchen Sie, man update-rc.dund auszuführen man -k init.

Antwort2

Geben Sie $network wie folgt an:

#!/bin/bash                                                          
### BEGIN INIT INFO                                                  
# Provides: mountftp                                                 
# Required-Start: $remote_fs $syslog $network                        
# Required-Stop: $remote_fs $syslog $network                         
# Default-Start: 2 3 4 5                                             
# Default-Stop: 0 1 6                                                
# Short-Description: Mount disk2                                     
# Description: Mount disk2                                           
### END INIT INFO

verwandte Informationen