Exécuter le script bash au démarrage

18

Je sais que cette question a déjà été posée, mais je ne trouve pas de solution à mon problème, je n'arrive pas à faire exécuter mon script au démarrage. Voici mon script:

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

Je l'ai mis dans le /etc/init.drépertoire

Assurez-vous qu'il avait un exécutable en utilisant chmod 755 /etc/init.d/iptables.sh

Et.. Voila touch /etc/rc3.d/S01iptables.sh

Mais rien :( ... Des suggestions?

[Nov 2017] La ​​réponse acceptée ici doit être considérée comme obsolète, veuillez consulter /raspberrypi//a/75057/5538

Boucles d'or
la source

Réponses:

12

[Veuillez consulter la note dans la question concernant l'obsolescence de cette réponse.]

Essayez d'utiliser cette commande pour vous assurer que votre script est ajouté à la séquence de démarrage:

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

Notez que vous pouvez rendre un script exécutable en utilisant l'option + x avec chmod:

chmod +x /etc/init.d/nameofscript.sh
Steve
la source
1
Oui, la update-rc.dcommande a fonctionné: D ... Je l'ai utilisé avant, mais il semblait simplement renvoyer une erreur, donc je l'ai ignoré Lol ... Merci pour l'aide: D
5
Ce serait sudo update-rc.d nameofscript.sh defaults, au moins sur Jessie, à éviter update-rc.d: error: initscript does not exist: /etc/init.d//etc/init.d/nameofscript.sh.
derFunk
Ce script doit-il se terminer dans un délai raisonnable? Ou peut-il être utilisé pour boucler une vidéo à l'infini par exemple?
clankill3r
19

Vous pouvez également configurer un cronjob ( voir le tutoriel ) pour le faire fonctionner au démarrage

(sudo) crontab -e

ajouter uniquement sudosi votre script a besoin des privilèges de superutilisateur. Ajoutez ensuite ceci à votre crontab:

@reboot /path/to/script.sh
nagyben
la source
J'ai utilisé cette méthode pour lancer un script et fermer tous les accès ssh pour une raison quelconque. J'ai dû monter le disque sur un autre appareil Linux et commenter la ligne crontab.
Phill Healey
6

Vous pouvez ajouter votre commande exécutable de script au bas de .bashrccelle-ci pour exécuter votre script chaque fois que vous vous connectez .

  1. Assurez-vous que vous êtes dans le pidossier:

    $ cd ~
    
  2. Créez un fichier et écrivez un script à exécuter dans le fichier:

    $ sudo nano superscript
    
  3. Enregistrer et sortie: Ctrl+ X, Y,Enter

  4. Ouvrez .bashrcpour la configuration:

    $ sudo nano .bashrc
    
  5. Faites défiler vers le bas et ajoutez la ligne: ./superscript

  6. Enregistrer et sortie: Ctrl+ X, Y,Enter


Si vous recherchez une solution qui fonctionne au démarrage de la console , jetez un œil à ce lien . Résumé de base:

  1. Créez un fichier pour votre script de démarrage et écrivez votre script dans le fichier:

    $ sudo nano /etc/init.d/superscript
    
  2. Enregistrer et sortie: Ctrl+ X, Y,Enter

  3. Rendez le script exécutable:

    $ sudo chmod 755 /etc/init.d/superscript
    
  4. Enregistrer le script à exécuter au démarrage:

    $ sudo update-rc.d superscript defaults
    

Si vous voulez qu'un script s'exécute lorsque vous démarrez dans l'environnement LXDE , vous pouvez jeter un œil à ce billet de forum Raspberry Pi :

  1. Aller vers ~/.config/lxsession/LXDE-pi

  2. Ouvrez le autostartfichier dans ce dossier:

    $ sudo nano autostart
    
  3. Ajoutez @bash /path/to/scriptname &sur une nouvelle ligne. Si vous voulez exécuter quelque chose comme un script python, mettez quelque chose comme @python mypython.pysur une nouvelle ligne. Exécuter un fichier de script le serait @./superscript, mais pour une raison quelconque, le script s'exécute dans une boucle infinie ( cela arrêtera peut - être cela ).

  4. Enregistrer et sortie: Ctrl+ X, Y,Enter

  5. Redémarrez votre Raspberry Pi dans l'environnement LXDE.

extrait du script Execute au démarrage

Liam
la source
1

J'ajoute généralement la ligne pour exécuter le script /etc/rc.local, par exemple /path/to/my/script.sh &, avant la dernière ligne exit 0. J'ai ajouté le "&" afin d'envoyer le script en arrière-plan au cas où il ne reviendrait pas, sinon les commandes suivantes ne seraient pas exécutées.

Donc, dans votre cas, j'ajouterais simplement les deux lignes

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

à la fin de /etc/rc.localjuste avant exit 0.

George
la source