Ejecutar script bash al inicio

18

Sé que esta pregunta ya se ha hecho antes, pero no puedo encontrar una solución para mi problema, simplemente no puedo ejecutar mi script al inicio. Aquí está mi guión:

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

Lo puse en el /etc/init.ddirectorio

Se aseguró de que tuviera ejecutable usando chmod 755 /etc/init.d/iptables.sh

Y hecho touch /etc/rc3.d/S01iptables.sh

Pero nada :( ... ¿Alguna sugerencia?

[Nov 2017] La ​​respuesta aceptada aquí debe considerarse obsoleta, consulte /raspberrypi//a/75057/5538

Ricitos de oro
fuente

Respuestas:

12

[Consulte la nota en la pregunta sobre la obsolescencia de esta respuesta.]

Intente usar este comando para asegurarse de que su secuencia de comandos se agregue a la secuencia de arranque:

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

Tenga en cuenta que puede hacer que un script sea ejecutable usando la opción + x con chmod:

chmod +x /etc/init.d/nameofscript.sh
Steve
fuente
1
Sí, el update-rc.dcomando funcionó: D ... Lo usé antes, pero parecía que solo devolvía un error, así que lo ignoré Lol ... Gracias por la ayuda: D
55
Sería sudo update-rc.d nameofscript.sh defaults, al menos en Jessie, evitarlo update-rc.d: error: initscript does not exist: /etc/init.d//etc/init.d/nameofscript.sh.
derFunk
¿Este script tiene que terminar dentro de un tiempo razonable? ¿O se puede usar para repetir un video por infinito, por ejemplo?
clankill3r
19

También puede configurar un cronjob ( consulte el tutorial ) para que se ejecute al inicio

(sudo) crontab -e

solo agregue sudosi su script necesita privilegios de superusuario. Luego agregue esto a su crontab:

@reboot /path/to/script.sh
nagyben
fuente
Usé este método para iniciar un script y cerró todos los accesos ssh por alguna razón. Tuve que montar la unidad en otro dispositivo Linux y comentar la línea crontab.
Phill Healey
6

Puede agregar su comando ejecutable de secuencia de comandos al final de .bashrcla misma y ejecutará su secuencia de comandos cada vez que inicie sesión .

  1. Asegúrate de estar en la picarpeta:

    $ cd ~
    
  2. Cree un archivo y escriba una secuencia de comandos para ejecutar en el archivo:

    $ sudo nano superscript
    
  3. Guardar y salir: Ctrl+ X, Y,Enter

  4. Abrir .bashrcpara la configuración:

    $ sudo nano .bashrc
    
  5. Desplácese hacia abajo y agregue la línea: ./superscript

  6. Guardar y salir: Ctrl+ X, Y,Enter


Si está buscando una solución que funcione en el arranque de la consola , eche un vistazo a este enlace . Resumen básico:

  1. Cree un archivo para su script de inicio y escriba su script en el archivo:

    $ sudo nano /etc/init.d/superscript
    
  2. Guardar y salir: Ctrl+ X, Y,Enter

  3. Haga que el script sea ejecutable:

    $ sudo chmod 755 /etc/init.d/superscript
    
  4. Registrar la secuencia de comandos que se ejecutará al inicio:

    $ sudo update-rc.d superscript defaults
    

Si desea que se ejecute un script cuando inicia en el entorno LXDE , puede echar un vistazo a esta publicación del foro de Raspberry Pi :

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

  2. Abra el autostartarchivo en esa carpeta:

    $ sudo nano autostart
    
  3. Agregar @bash /path/to/scriptname &en una nueva línea. Si desea ejecutar algo como un script de Python, coloque algo como @python mypython.pyen una nueva línea. Ejecutar un archivo de script sería @./superscript, pero por alguna razón el script se ejecuta en un bucle infinito (tal vez esto lo detendrá).

  4. Guardar y salir: Ctrl+ X, Y,Enter

  5. Reinicie su Raspberry Pi en el entorno LXDE.

tomado de Ejecutar script al inicio

Liam
fuente
1

Por lo general, solo agrego la línea para ejecutar el script /etc/rc.local, por ejemplo /path/to/my/script.sh &, antes de la última línea que tiene exit 0. Agregué el "&" para enviar el script al fondo en caso de que no regrese, de lo contrario, los siguientes comandos no se ejecutarían.

Entonces, en su caso, simplemente agregaría las dos líneas

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

al final de /etc/rc.localjusto antes exit 0.

Jorge
fuente