Debian: Як запустити скрипт при запуску без необхідності писати 30 рядків скрипту оболонки?


20

У мене є сервер Debian, і мені просто потрібно запустити сценарій при запуску.

Я читав це: https://www.debian-administration.org/article/28/Making_scripts_run_at_boot_time_with_Debian

Зараз я отримав: insserv: предупреждение: пропущені теги та перестановки LSB в сценарії

тож схоже, я маю зараз додати:

### BEGIN INIT INFO
# Provides:          scriptname
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

Зараз це виглядає божевільно: як 30 рядків сценарію просто для запуску програми при запуску.

Чи є інструмент, який дозволяє це зробити просто?

З повагою


Що це за сценарій? Ви намагалися запустити його з /etc/rc.local? Ви можете покласти шлях до сценарію в rc.local файл, і він буде виконуватися під час завантаження.
Diamant

простий скрипт, який запускає процес вузла, запускає php тощо ...
yarek

Я рахую 9 рядків, а не 30. І це коментарі, а не скрипт оболонки (а не SSH-скрипт).
wurtel

Вони є заголовками LSB (див. Wiki.debian.org/LSBInitScripts ), а шаблона сценарію LSB init знаходиться на північ від 70 рядків (див. Такі речі, як github.com/fhd/init-script-template/blob/master/template ). Якщо ви хочете зробити одну команду, запущену вручну, щоб обробляти вас під час завантаження комп'ютером через якийсь файл в / etc, це здається досить складною церемонією!
kristopolous

Відповіді:


29

Якщо ваш скрипт "просто сценарій" і не запускає демон, спробуйте використовувати /etc/rc.local(виконаний як root) або crontab(виконаний як користувач на ваш вибір).

Два приклади:

  • /etc/rc.local

    #!/bin/sh -e
    #(Multiple lines of comments removed.)
    /usr/local/bin/your-script.sh
    exit 0
    
  • crontab(відредаговано, наприклад, через crontab -e)

    #(Multiple lines of comments removed.)
    @reboot /usr/local/bin/your-script.sh
    

Редагувати 1: Просто прочитайте ваш коментар: Якщо ваш скрипт починає демон, який повинен працювати весь час, я б радив не використовувати rc.localабо crontab, а замість цього написати належний (або кілька) init.dсценарій. Таким чином, ви / ваша система здатні чисто перезапустити / перезавантажити / запустити / зупинити і т.д. демони.

Редагування 2: Ви називаєте це божевільним, але LSB tagsнадайте деяке значення: "Задокументувавши залежності часу виконання для скриптів init.d, ви зможете перевірити поточний порядок завантаження, замовити завантаження за допомогою цих залежностей та запустити сценарії завантаження у паралельно для прискорення процесу завантаження. " Для отримання детальної інформації перейдіть до вікі Debian .

(До речі: це попередження, тому насправді, саме від вас залежить, як і що з цим робити.)


Мені подобається версія crontab .. але я не думаю, що @reboot працює на debian!
ярек

@yarek: Це працює, використовуючи це сам (для сценаріїв, які є просто сценаріями).
gf_

2
це працює, але я думаю, що це лише для користувачів root, тому вам доведеться це зробити@reboot root /usr/local/bin/your-script.sh
Froggiz

До речі, я говорив про debian!
Froggiz

Я все ще дуже розгублений: чи дозволяє cron запускати anyscript при перезапуску сервера, не відкриваючи сеанси як root.
ярек

0

нагляд також є варіантом. Ви знову напишете кілька рядків для того, щоб запустити свої node.js та PHP, але їх буде менше.


0

Ви можете використовувати monitd для цього, просто напишіть якесь визначення monit , і воно запустить демони для вас. Але чому ви не використовуєте належним чином сценарії LSB? Це не так важко написати (ви пишете це лише один раз), і це найчистіший і найцінніший спосіб досягти цього.

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