Esegui script bash all'avvio


18

So che questa domanda è stata posta prima, ma non riesco a trovare una soluzione al mio problema, non riesco a far eseguire il mio script all'avvio. Ecco la mia sceneggiatura:

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

L'ho messo nella /etc/init.ddirectory

Assicurati che fosse eseguibile usando chmod 755 /etc/init.d/iptables.sh

E fatto touch /etc/rc3.d/S01iptables.sh

Ma niente :( ... Qualche suggerimento?

[Nov 2017] La ​​risposta accettata qui dovrebbe essere considerata obsoleta, consultare /raspberrypi//a/75057/5538

Risposte:


12

[Vedi la nota nella domanda relativa all'obsolescenza di questa risposta.]

Prova a utilizzare questo comando per assicurarti che lo script sia aggiunto alla sequenza di avvio:

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

Nota che puoi rendere eseguibile uno script usando l'opzione + x con chmod:

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

1
Sì, il update-rc.dcomando ha funzionato: D ... L'ho usato prima, ma sembrava restituire un errore, quindi l'ho ignorato Lol ... Grazie per l'aiuto: D

5
Sarebbe sudo update-rc.d nameofscript.sh defaults, almeno su Jessie, da evitare update-rc.d: error: initscript does not exist: /etc/init.d//etc/init.d/nameofscript.sh.
derFunk,

Questo script deve terminare entro un termine ragionevole? O può essere usato per esempio per riprodurre un video all'infinito?
clankill3r,

19

Puoi anche impostare un cronjob ( vedi tutorial ) per farlo funzionare all'avvio

(sudo) crontab -e

aggiungi solo sudose lo script ha bisogno dei privilegi di superutente. Quindi aggiungi questo al tuo crontab:

@reboot /path/to/script.sh

Ho usato questo metodo per lanciare uno script e per qualche motivo ha chiuso tutti gli accessi ssh. Ho dovuto montare il disco su un altro dispositivo Linux e commentare la linea crontab.
Phill Healey,

6

È possibile aggiungere il comando eseguibile dello script in fondo .bashrcche eseguirà lo script ogni volta che si accede .

  1. Assicurati di essere nella picartella:

    $ cd ~
    
  2. Crea un file e scrivi uno script da eseguire nel file:

    $ sudo nano superscript
    
  3. Salvare e uscire: Ctrl+ X, Y,Enter

  4. Apri .bashrcper la configurazione:

    $ sudo nano .bashrc
    
  5. Scorri verso il basso e aggiungi la riga: ./superscript

  6. Salvare e uscire: Ctrl+ X, Y,Enter


Se stai cercando una soluzione che funzioni all'avvio della console , dai un'occhiata a questo link . Rundown di base:

  1. Crea un file per il tuo script di avvio e scrivi il tuo script nel file:

    $ sudo nano /etc/init.d/superscript
    
  2. Salvare e uscire: Ctrl+ X, Y,Enter

  3. Rendi eseguibile lo script:

    $ sudo chmod 755 /etc/init.d/superscript
    
  4. Registra lo script da eseguire all'avvio:

    $ sudo update-rc.d superscript defaults
    

Se si desidera eseguire uno script all'avvio nell'ambiente LXDE , è possibile dare un'occhiata a questo post sul forum di Raspberry Pi :

  1. Navigare verso ~/.config/lxsession/LXDE-pi

  2. Apri il autostartfile in quella cartella:

    $ sudo nano autostart
    
  3. Aggiungi @bash /path/to/scriptname &su una nuova riga. Se vuoi eseguire qualcosa di simile a uno script Python, metti qualcosa di simile @python mypython.pysu una nuova riga. L'esecuzione di un file di script sarebbe @./superscript, ma per qualche motivo lo script viene eseguito in un ciclo infinito (forse questo lo fermerà).

  4. Salvare e uscire: Ctrl+ X, Y,Enter

  5. Riavvia il tuo Raspberry Pi nell'ambiente LXDE.

preso dallo script Execute all'avvio


1

Di solito aggiungo solo la riga per eseguire lo script /etc/rc.local, ad esempio /path/to/my/script.sh &prima dell'ultima riga che ha exit 0. Ho aggiunto "&" per inviare lo script in background nel caso in cui non ritorni, altrimenti i successivi comandi non verrebbero eseguiti.

Quindi nel tuo caso aggiungerei semplicemente le due righe

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

alla fine di /etc/rc.localpoco prima exit 0.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.