Executar script bash na inicialização

18

Sei que essa pergunta já foi feita antes, mas não consigo encontrar uma correção para o meu problema, simplesmente não consigo executar meu script na inicialização. Aqui está o meu 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

Eu coloquei no /etc/init.ddiretório

Certifique-se de ter executável usando chmod 755 /etc/init.d/iptables.sh

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

Mas nada :( ... Alguma sugestão?

[Nov 2017] A resposta aceita aqui deve ser considerada obsoleta, consulte /raspberrypi//a/75057/5538

Cachinhos Dourados
fonte

Respostas:

12

[Consulte a nota na pergunta sobre a obsolescência desta resposta.]

Tente usar este comando para garantir que seu script seja adicionado à sequência de inicialização:

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

Observe que você pode tornar um script executável usando a opção + x com chmod:

chmod +x /etc/init.d/nameofscript.sh
Steve
fonte
1
Sim, o update-rc.dcomando funcionou: D ... eu o usei antes, mas parecia retornar apenas um erro, então eu o ignorei Lol ... Obrigado pela ajuda: D
5
Seria sudo update-rc.d nameofscript.sh defaults, pelo menos em Jessie, evitar update-rc.d: error: initscript does not exist: /etc/init.d//etc/init.d/nameofscript.sh.
DerFunk
Esse script precisa terminar dentro de um tempo razoável? Ou pode ser usado para repetir um vídeo para o infinito, por exemplo?
Clankill3r
17

Você também pode configurar um cronjob ( consulte o tutorial ) para executá-lo na inicialização

(sudo) crontab -e

adicione apenas sudose o seu script precisar de privilégios de superusuário. Em seguida, adicione isso ao seu crontab:

@reboot /path/to/script.sh
nagyben
fonte
Eu usei esse método para iniciar um script e desligou todos os acessos ssh por algum motivo. Eu tive que montar a unidade em outro dispositivo Linux e comentar a linha crontab.
Phill Healey
6

Você pode adicionar o seu comando executável de script na parte inferior .bashrc, para executar seu script sempre que você efetuar login .

  1. Verifique se você está na pipasta:

    $ cd ~
    
  2. Crie um arquivo e escreva um script para executar no arquivo:

    $ sudo nano superscript
    
  3. Salvar e sair: Ctrl+ X, Y,Enter

  4. Abra .bashrcpara configuração:

    $ sudo nano .bashrc
    
  5. Role para baixo até a parte inferior e adicione a linha: ./superscript

  6. Salvar e sair: Ctrl+ X, Y,Enter


Se você estiver procurando uma solução que funcione na inicialização do console , dê uma olhada neste link . Resumo básico:

  1. Crie um arquivo para o seu script de inicialização e escreva-o no arquivo:

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

  3. Torne o script executável:

    $ sudo chmod 755 /etc/init.d/superscript
    
  4. Registre o script a ser executado na inicialização:

    $ sudo update-rc.d superscript defaults
    

Se você deseja que um script seja executado quando você inicializa no ambiente LXDE , consulte esta postagem no fórum do Raspberry Pi :

  1. Navegar para ~/.config/lxsession/LXDE-pi

  2. Abra o autostartarquivo nessa pasta:

    $ sudo nano autostart
    
  3. Adicione @bash /path/to/scriptname &uma nova linha. Se você deseja executar algo como um script python, coloque algo como @python mypython.pyem uma nova linha. A execução de um arquivo de script seria @./superscript, mas, por algum motivo, o script é executado em um loop infinito (talvez isso pare com isso).

  4. Salvar e sair: Ctrl+ X, Y,Enter

  5. Reinicie seu Raspberry Pi no ambiente LXDE.

extraído do script Executar na inicialização

Liam
fonte
1

Normalmente, apenas adiciono a linha para executar o script /etc/rc.local, por exemplo /path/to/my/script.sh &, antes da última linha que possui exit 0. Eu adicionei o "&" para enviar o script para segundo plano, caso ele não retorne, caso contrário, os próximos comandos não serão executados.

Então, no seu caso, eu simplesmente adicionaria as duas linhas

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

no final de /etc/rc.localpouco antes exit 0.

George
fonte