Ich habe einen Dienst, den ich wie folgt installiere:
install -m 755 init_script /etc/init.d/spacenavd
cd /etc/rc2.d
ln -s ../init.d/spacenavd S99spacenavd
Das Init_Script startet das Skript:
/usr/local/bin/spacenavd -v
All dies funktioniert einwandfrei und ermöglicht den automatischen Start des Dienstes beim Start. Ich habe jedoch Probleme, beim Start ein anderes Skript auszuführen, das den Spacenavd-Dienst verwendet. Dieses Skript funktioniert normal, wenn ich es nach der Anmeldung manuell ausführe. Wenn ich es jedoch beim Start ausführe, funktioniert es nicht, wenn ich es in rc.local einfüge.
Ich mache Folgendes in rc.local:
cd /home/filedirec
sudo ./my_script &
Das funktioniert manchmal und manchmal nicht. Ich kann die Ursache nicht finden. Wie kann ich das Problem am besten beheben?
Antwort1
Déjà-vu.
Sudo ist ein interaktives Programm, bei dem Sie ein Passwort eingeben müssen, um einen Befehl als Root (oder ein anderer Benutzer) ausführen zu können, sofern Sie Ihre Anmeldeinformationen nicht kürzlich eingegeben haben.rc.localDas Skript ist nicht an Ihre Konsole angehängt, sodass Sie nie eine Abfrage zur Kennworteingabe sehen.
Derrc.localSkript läuft auch schon als Root, daher sollten Sie dassudoBefehl davon.
Besser noch wäre es, einfach alles, was Sie hinzugefügt haben, durch Folgendes zu ersetzen:/home/filedirec/mein_Skript(oder/home/filedirec/mein_Skript &wenn nötig). Durch die Verwendung des absoluten Pfads können Sie schneller und einfacher erkennen, was genau derrc.localSkript macht, wenn es später überprüft werden muss,CDund dergleichen sind im Allgemeinen besser für interaktive Shells geeignet.
Antwort2
Sie können Ihr Skript beispielsweise in einem separatenBildschirmSitzung.
Ihre rc.local-Datei könnte beispielsweise folgendermaßen aussehen:
/usr/bin/screen -dmS my_script bash -c '/home/filedirec/my_script'
Dann können Sie den Bildschirm nach dem Start einfach „wieder anhängen“ und sehen, was mit Ihrem Skript passiert. Es ist auch möglich, die Ausgabe in einer Datei zu protokollieren.
Wenn der Bildschirmbefehl auf Ihrem System nicht verfügbar ist:sudo apt-get install screen
Ein Tutorial mit Bildern: screen: Halten Sie Ihre Prozesse trotz unterbrochener Verbindung am Laufen