Führen Sie das Bash-Skript beim Start aus


18

Ich weiß, dass diese Frage bereits gestellt wurde, aber ich kann keine Lösung für mein Problem finden. Ich kann mein Skript beim Start einfach nicht ausführen. Hier ist mein Drehbuch:

#!/bin/bash
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT 
iptables -A OUTPUT -m state --state NEW -p tcp --sport 22 -j ACCEPT

Ich habe es in das /etc/init.dVerzeichnis gelegt

Stellen Sie sicher, dass es ausführbar war, indem Sie verwenden chmod 755 /etc/init.d/iptables.sh

Und fertig touch /etc/rc3.d/S01iptables.sh

Aber nichts :( ... Irgendwelche Vorschläge?

[Nov 2017] Die hier akzeptierte Antwort sollte als veraltet angesehen werden. Weitere Informationen finden Sie unter /raspberrypi//a/75057/5538

Antworten:


12

[Bitte beachten Sie den Hinweis in der Frage bezüglich der Veralterung dieser Antwort.]

Versuchen Sie, mit diesem Befehl sicherzustellen, dass Ihr Skript zur Startsequenz hinzugefügt wird:

sudo update-rc.d /etc/init.d/nameofscript.sh defaults

Beachten Sie, dass Sie ein Skript mit der Option + x mit chmod ausführbar machen können:

chmod +x /etc/init.d/nameofscript.sh

1
Ja, der update-rc.dBefehl hat funktioniert: D ... Ich habe ihn zuvor verwendet, aber er hat anscheinend nur einen Fehler zurückgegeben, also habe ich ihn ignoriert. Lol ... Danke für die Hilfe: D

5
sudo update-rc.d nameofscript.sh defaultsZumindest bei Jessie wäre das zu vermeiden update-rc.d: error: initscript does not exist: /etc/init.d//etc/init.d/nameofscript.sh.
derFunk

Muss dieses Skript innerhalb einer angemessenen Zeit enden? Oder kann es zum Beispiel verwendet werden, um ein Video auf unendlich zu schleifen?
Clankill3r

17

Sie können auch einen Cronjob einrichten ( siehe Tutorial ), damit dieser beim Start ausgeführt wird

(sudo) crontab -e

Nur hinzufügen, sudowenn Ihr Skript Superuser-Berechtigungen benötigt. Dann füge dies zu deiner Crontab hinzu:

@reboot /path/to/script.sh

Ich habe diese Methode verwendet, um ein Skript zu starten und aus irgendeinem Grund den gesamten SSH-Zugriff zu beenden. Ich musste das Laufwerk auf einem anderen Linux-Gerät einbinden und die crontab-Zeile auskommentieren.
Phill Healey

6

Sie können Ihren ausführbaren Skriptbefehl unten hinzufügen .bashrc, damit Ihr Skript bei jeder Anmeldung ausgeführt wird .

  1. Stellen Sie sicher, dass Sie sich im piOrdner befinden:

    $ cd ~
    
  2. Erstellen Sie eine Datei und schreiben Sie ein Skript, das in der Datei ausgeführt werden soll:

    $ sudo nano superscript
    
  3. Speichern und beenden: Ctrl+ X, Y,Enter

  4. Zur .bashrcKonfiguration öffnen :

    $ sudo nano .bashrc
    
  5. Scrolle nach unten und füge die Zeile hinzu: ./superscript

  6. Speichern und beenden: Ctrl+ X, Y,Enter


Wenn Sie nach einer Lösung suchen, die beim Booten der Konsole funktioniert , sehen Sie sich diesen Link an . Grundlegender Überblick:

  1. Erstellen Sie eine Datei für Ihr Startskript und schreiben Sie Ihr Skript in die Datei:

    $ sudo nano /etc/init.d/superscript
    
  2. Speichern und beenden: Ctrl+ X, Y,Enter

  3. Machen Sie das Skript ausführbar:

    $ sudo chmod 755 /etc/init.d/superscript
    
  4. Registrieren Sie das Skript, das beim Start ausgeführt werden soll:

    $ sudo update-rc.d superscript defaults
    

Wenn Sie möchten, dass ein Skript beim Booten in die LXDE-Umgebung ausgeführt wird , können Sie sich diesen Beitrag im Raspberry Pi-Forum ansehen :

  1. Navigiere zu ~/.config/lxsession/LXDE-pi

  2. Öffnen Sie die autostartDatei in diesem Ordner:

    $ sudo nano autostart
    
  3. Fügen Sie @bash /path/to/scriptname &eine neue Zeile hinzu. Wenn Sie so etwas wie ein Python-Skript ausführen möchten, setzen Sie so etwas wie @python mypython.pyin eine neue Zeile. Das Ausführen einer Skriptdatei wäre @./superscript, aber aus irgendeinem Grund wird das Skript in einer Endlosschleife ausgeführt (möglicherweise wird dies das beenden).

  4. Speichern und beenden: Ctrl+ X, Y,Enter

  5. Starten Sie Ihren Raspberry Pi in der LXDE-Umgebung neu.

wird beim Start aus Execute script entnommen


1

Ich füge normalerweise nur die Zeile hinzu, in der das Skript ausgeführt werden soll /etc/rc.local, z. B. /path/to/my/script.sh &vor der letzten Zeile, die das Skript enthält exit 0. Ich habe das "&" hinzugefügt, um das Skript in den Hintergrund zu schicken, falls es nicht zurückkehrt, da sonst die nächsten Befehle nicht ausgeführt würden.

In Ihrem Fall würde ich also einfach die beiden Zeilen hinzufügen

iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT 
iptables -A OUTPUT -m state --state NEW -p tcp --sport 22 -j ACCEPT

am ende /etc/rc.localkurz davor exit 0.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.