Ich habe ein Skript, das ich gerne ausführen würde, wenn mein System startet. Ich habe es auf "rc.local" gestellt, aber es funktioniert nicht. Wie kann ich die Ausführung beim Start aktivieren?
Wo ist der Befehl xsetwacom? /etc/rc.local wird beim Start mit einem sehr einfachen PATH ausgeführt. Es unterscheidet sich wahrscheinlich von dem PFAD, den Sie am Terminal angemeldet haben. Geben Sie im Terminal Folgendes ein: Geben Sie -p xsetwacom ein, und ersetzen Sie dann den Befehl "xsetwacom" in /etc/rc.local durch den vollständigen Pfad, der vom Befehl "type -p" zurückgegeben wird. Müssen Sie manuelle Initialisierungen vornehmen, bevor xsetwacom für Sie funktioniert?
Waltinator
3
Wenn Sie systemd als Startup-Manager verwenden, stellen Sie sicher, dass die rc.local-Kompatibilität ausgeführt wird:systemctl status rc-local.service
rubo77
Der Kommentar des Waltinators war mein Problem. Aufgrund des minimalen Pfads wusste es nicht, wie die Skripte ausgeführt werden sollten, die ausgeführt werden sollten. Der Pfad geladen auf meinem Ubuntu 14.04 System zum Zeitpunkt der runninig /etc/rc.local war die folgende: / sbin: / usr / sbin: / bin: / usr / bin ... Sie Ihr , indem sie überprüfen könnten echo $PATH > /home/rc_local_pathin Ihre / etc / rc.local und dann die Datei überprüfen, nachdem sie beim Start ausgeführt wurde.
RaisinBranCrunch
Denken Sie daran, dass Sie Ihr Skript als Daemon in der Datei starten müssen , wenn es kontinuierlich ausgeführt werden soll! rc.local
Totymedli
Verwenden Sie sudo systemctl enable rc-local.servicediese Option, um sicherzustellen, dass /etc/rc.local sie während des Serverstarts ausgeführt wird
William,
Antworten:
56
Können Sie Ihr Skript manuell ausführen? Wenn nicht, liegt ein Problem mit diesem Skript vor. ansonsten schau mal bei rc.local nach. (Wenn dieses Skript als root ausgeführt werden muss, müssen Sie sudo verwenden, um es manuell auszuführen.)
Stellen Sie sicher, dass /etc/rc.local ausführbar ist und dass das aufgerufene Skript auch ausführbar ist.
$ ls -l /etc/rc.local-rwxr-xr-x 1 root root 4192010-08-2711:26/etc/rc.local
Stellen Sie sicher, dass rc.local eine Shebang-Zeile hat (dies ist die Standardeinstellung):
Ja, ich kann das Skript manuell ausführen. Wie kann ich sicherstellen, dass /etc/rc.local ausführbar ist? Was muss ich eingeben? Ist es "$ ls -l /etc/rc.local -rwxr-xr-x 1"? Vielen Dank!
Pedroo
@pedroo: Ich habe genau das kopiert, was ich in meinem Terminal sehe (so dass Sie die Eingabeaufforderung, die Eingabe und die Ausgabe oben sehen). Der Befehl lautet "ls -l /etc/rc.local" und wenn er ausführbar ist, enthält die Ausgabe diese Xs.
3
Ich habe das "ls -l /etc/rc.local" ausprobiert und es ist ausführbar, aber ich kann es beim Start nicht zum Laufen bringen ... Irgendeine Idee?
Pedroo
1
@pedroo: Dazu muss der X-Server ausgeführt werden, was bei der Ausführung von rc.local nicht der Fall ist. Wenn Sie es von rc.local ausführen, wird es einfach beendet, ohne dass etwas unternommen wird (obwohl ich hoffe, dass es eine Nachricht in syslog oder anderswo ablegt). Sie müssen die xsetwacom-Befehle stattdessen in ~ / .xinitrc oder / etc / X / xinit / xinitrc einfügen.
1
@pedroo: Weil rc.local Befehle enthält, die zu einer anderen Zeit ausgeführt werden sollen. Erstellen Sie eine neue Datei, legen Sie sie in ~ / bin ab , markieren Sie sie als ausführbar (chmod oder Eigenschaften in Nautilus), geben Sie in der ersten Zeile "#! / Bin / bash" ein und fügen Sie Ihre Befehle in spätere Zeilen ein.
53
In meinem Fall war keine der Anweisungen eine perfekte Lösung. Wenn Sie so unglücklich waren wie ich, probieren Sie dieses ausführliche
Platzieren Sie Ihren gesamten ausführbaren Code in einer separaten Textdatei mit einem beliebigen Namen wie foo.sh und speichern Sie ihn an einem beliebigen Ort.
Hinzufügen
#!/bin/sh
als erste Zeile Ihres Codes.
Versuchen Sie, Ihre Datei foo.sh by auszuführen
sudo foo.sh
um zu überprüfen, gibt es überhaupt keine Fehler.
Geben Sie in das Skript /etc/rc.local den vollständigen Pfad und den Namen des erstellten Skripts nach dem Befehl sh ein
sh '/path/to/your/script/foo.sh'
Denken Sie daran, die obige Zeile vor die letzte Codezeile zu setzen
exit 0
am Ende des Skripts /etc/rc.local.
Überprüfen Sie die erste Zeile von /etc/rc.local
#!/bin/sh -e
Machen Sie Ihre /etc/rc.local ausführbar, falls sie noch nicht von ausführbar ist
Schritt 8 war der Schlüssel, mit dem sichergestellt wurde, dass das Skript in der Startumgebung ausgeführt wird. In meinem Fall muss ich den vollständigen Pfad zum Befehl angeben.
Peter Gluck
Prefect und Step-to-Step-Größen, es funktioniert auf Centos, aber sudo /etc/rc.local startzuerst ausgeführt.
A1Gard
Danke - diese Panne hat mir sehr geholfen und wie oben war Schritt 8 auch für mich der Schlüssel! Andernfalls wird +1 nicht umgeleitet (als Referenz, Node-App, die auf einem Bitnami-Cloud-Server ausgeführt wird und für die ununterbrochene Ausführung für immer verwendet wird ).
Fidev
Schritt 8 war ein guter Tipp, aber ich denke, Schritt 7 könnte das sein, was ich behoben habe. Ich habe versucht, das Skript mit cron auszuführen, um einen Tunnel zu öffnen, aber es schlug nach dem Zufallsprinzip
fehl
28
Bei neueren Ubuntu-Versionen systemdwird /etc/rc.localnicht immer standardmäßig geladen.
Überprüfen Sie, ob der Kompatibilitätsdienst mit geladen ist
systemctl status rc-local.service
Wenn es active (exited) enthält , scheint Ihre Einstellung in Ordnung zu sein und Sie könnten einen weiteren Fehler in Ihrer /etc/rc.localDatei haben (dies könnte beispielsweise ein Befehl sein, der fehlschlägt).
systemctl status rc-local.service
echo $PATH > /home/rc_local_path
in Ihre / etc / rc.local und dann die Datei überprüfen, nachdem sie beim Start ausgeführt wurde.rc.local
sudo systemctl enable rc-local.service
diese Option, um sicherzustellen, dass/etc/rc.local
sie während des Serverstarts ausgeführt wirdAntworten:
Können Sie Ihr Skript manuell ausführen? Wenn nicht, liegt ein Problem mit diesem Skript vor. ansonsten schau mal bei rc.local nach. (Wenn dieses Skript als root ausgeführt werden muss, müssen Sie sudo verwenden, um es manuell auszuführen.)
Stellen Sie sicher, dass /etc/rc.local ausführbar ist und dass das aufgerufene Skript auch ausführbar ist.
Stellen Sie sicher, dass rc.local eine Shebang-Zeile hat (dies ist die Standardeinstellung):
quelle
In meinem Fall war keine der Anweisungen eine perfekte Lösung. Wenn Sie so unglücklich waren wie ich, probieren Sie dieses ausführliche
Hinzufügen
als erste Zeile Ihres Codes.
Versuchen Sie, Ihre Datei foo.sh by auszuführen
um zu überprüfen, gibt es überhaupt keine Fehler.
Geben Sie in das Skript /etc/rc.local den vollständigen Pfad und den Namen des erstellten Skripts nach dem Befehl sh ein
Denken Sie daran, die obige Zeile vor die letzte Codezeile zu setzen
am Ende des Skripts /etc/rc.local.
Überprüfen Sie die erste Zeile von /etc/rc.local
Machen Sie Ihre /etc/rc.local ausführbar, falls sie noch nicht von ausführbar ist
Überprüfen Sie, ob alles ordnungsgemäß funktioniert, indem Sie ausführen
quelle
sudo /etc/rc.local start
zuerst ausgeführt.Bei neueren Ubuntu-Versionen
systemd
wird/etc/rc.local
nicht immer standardmäßig geladen.Überprüfen Sie, ob der Kompatibilitätsdienst mit geladen ist
Wenn es active (exited) enthält , scheint Ihre Einstellung in Ordnung zu sein und Sie könnten einen weiteren Fehler in Ihrer
/etc/rc.local
Datei haben (dies könnte beispielsweise ein Befehl sein, der fehlschlägt).quelle
2 Vorschläge.
Führt das Zielskript einen sudo- Befehl aus? In diesem Fall möchten Sie möglicherweise das sudo-Kennwort angeben.Mein Fehler. Dann schau doch mal rein. Danke für die Korrektur enzotib :)
quelle
rc.local
wird als root ausgeführt, daher ist kein Passwort erforderlich.