Debian: Как запустить сценарий при запуске без необходимости написания 30 строк сценария оболочки?


20

У меня есть сервер Debian, и мне просто нужно запустить скрипт при запуске.

Я прочитал это: https://www.debian-administration.org/article/28/Making_scripts_run_at_boot_time_with_Debian

Я получил сейчас: insserv: warning: скрипт 'пропускает 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 расположен к северу от 70 строк (см. Такие вещи, как github.com/fhd/init-script-template/blob/master/template ). Если вы хотите, чтобы одна команда выполнялась вручную при загрузке с компьютера через какой-то файл в / etc, это выглядит довольно сложной церемонией!
Кристополус

Ответы:


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!
Фроггиз

Я все еще в замешательстве: действительно ли cron позволяет запускать anyscript при перезапуске сервера, не открывая сеансы как root.
Ярек

0

supervisord также вариант. Вы снова напишите несколько строк, чтобы запустить ваш node.js и PHP, но их будет меньше.


0

Вы можете использовать monitd для этого, просто напишите некоторое определение monit, и оно запустит для вас демоны. Но почему вы не используете правильный путь со скриптами LSB? Это не так сложно написать (вы пишете это только один раз), и это самый чистый и самый ценный способ достичь этого.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.