Запустити bash script при запуску


20

Я знаю, що це питання було задано раніше, але я не можу знайти свою проблему, я просто не можу запустити сценарій при запуску. Ось мій сценарій:

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

Я вкладаю його в /etc/init.dкаталог

Переконайтесь, що він був виконуваним за допомогою chmod 755 /etc/init.d/iptables.sh

І зробили touch /etc/rc3.d/S01iptables.sh

Але нічого :( ... Будь-які пропозиції?

[Лис 2017] Прийняту відповідь тут слід вважати застарілою, дивіться /raspberrypi//a/75057/5538

Відповіді:


13

[Будь ласка, дивіться примітку у питанні про застарілість цієї відповіді.]

Спробуйте скористатися цією командою, щоб переконатися, що ваш сценарій додається до завантажувальної послідовності:

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

Зауважте, що ви можете зробити сценарій виконуваним за допомогою параметра + x за допомогою chmod:

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

1
Так, update-rc.dкоманда працювала: D ... Я використовував її раніше, але, здавалося, просто повернув помилку, тому я проігнорував її Лол ... Дякую за допомогу: D

5
Це було б sudo update-rc.d nameofscript.sh defaults, принаймні на Джессі, уникати update-rc.d: error: initscript does not exist: /etc/init.d//etc/init.d/nameofscript.sh.
derFunk

Чи повинен цей сценарій закінчитися протягом розумного часу? Або його можна використовувати, наприклад, для циклу відео для нескінченності?
clankill3r

19

Ви також можете встановити cronjob ( див. Підручник ), щоб змусити його працювати при запуску

(sudo) crontab -e

додайте лише sudoякщо ваш сценарій потребує привілеїв суперпользователя. Потім додайте це у свій crontab:

@reboot /path/to/script.sh

Я використовував цей метод для запуску скрипту, і він чомусь відключив весь ssh-доступ. Мені довелося встановити накопичувач на іншому пристрої Linux та прокоментувати рядок crontab.
Філл Хелі

7

Ви можете додати виконувану команду сценарію внизу, .bashrcяка буде запускати ваш сценарій щоразу, коли ви входите в систему .

  1. Переконайтеся, що ви знаходитесь в piпапці:

    $ cd ~
    
  2. Створіть файл і напишіть сценарій для запуску у файл:

    $ sudo nano superscript
    
  3. Зберегти і вийти: Ctrl+ X, Y,Enter

  4. Відкрити .bashrcдля конфігурації:

    $ sudo nano .bashrc
    
  5. Прокрутіть униз донизу та додайте рядок: ./superscript

  6. Зберегти і вийти: Ctrl+ X, Y,Enter


Якщо ви шукаєте рішення, яке працює на завантаженні до консолі , перегляньте це посилання . Основний перехід:

  1. Створіть файл для свого сценарію запуску і напишіть свій сценарій у файл:

    $ sudo nano /etc/init.d/superscript
    
  2. Зберегти і вийти: Ctrl+ X, Y,Enter

  3. Зробіть сценарій виконуваним:

    $ sudo chmod 755 /etc/init.d/superscript
    
  4. Реєстрація сценарію для запуску:

    $ sudo update-rc.d superscript defaults
    

Якщо ви хочете, щоб сценарій запускався під час завантаження в середовище LXDE , ви можете ознайомитися з цим повідомленням на форумі Raspberry Pi :

  1. Перейдіть до ~/.config/lxsession/LXDE-pi

  2. Відкрийте autostartфайл у цій папці:

    $ sudo nano autostart
    
  3. Додати @bash /path/to/scriptname &в новому рядку. Якщо ви хочете запустити щось на зразок сценарію python, поставте щось на кшталт @python mypython.pyнового рядка. Запуск файлу сценарію було б @./superscript, але чомусь сценарій працює у нескінченному циклі (можливо, це зупинить це).

  4. Зберегти і вийти: Ctrl+ X, Y,Enter

  5. Перезавантажте Raspberry Pi в середовищі LXDE.

взятий із сценарію Execute при запуску


1

Зазвичай я просто додаю рядок для виконання сценарію /etc/rc.local, наприклад /path/to/my/script.sh &, перед останнім рядком exit 0. Я додав "&", щоб відправити скрипт на задній план, якщо він не повернеться, інакше наступні команди не будуть виконані.

Тож у вашому випадку я просто додав би два рядки

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

наприкінці /etc/rc.localтрохи раніше exit 0.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.