Как добавить скрипт для запуска и завершения работы в Debian?

12

название в значительной степени подводит итог.

Как добавить startup.sh и shutdown.sh моего серверного приложения в последовательность запуска и завершения работы ОС Debian?

Амир Арад
источник

Ответы:

15

В Debian должны быть размещены сценарии загрузки и завершения работы служб и приложений /etc/init.d/.

Debian предоставляет пример сценария, /etc/init.d/skeletonкоторый вы можете изменить по своему вкусу для вашего конкретного приложения.

Как только это на месте, звоните:

# update-rc.d YOURAPP defaults

Чтобы Debian добавил /etc/rc?.d/символические ссылки для вас.

Если вы предпочитаете меню или графический интерфейс, взгляните на пакет sysv-rc-confили ksysv.

MikeyB
источник
4

Вы можете вызвать свой скрипт из /etc/rc.local до строки, которая говорит о выходе 0

Что касается закрытия вашего приложения, я бы предложил поместить скрипт в /etc/rc0.d . Вам нужно назвать его заглавной буквой K , а затем двухзначным номером, который указывает порядок выполнения этих скриптов, а затем именем. Он будет вызываться с параметром «stop», но вы можете проигнорировать это для простого сценария остановки.

казарка
источник
Зачем вам возиться с rc.local, если вам все равно придется возиться с /etc/rcX.d?
womble
rc.local - подходящее место для простых вещей запуска - не нужно иметь дело с параметрами запуска / остановки и т. д. Но у него нет возможности завершить процесс. Материал rc0.d немного взломан.
Брент
3

Для запуска взгляните на это .

Для выключения создайте ссылку / скопируйте ваш скрипт в одну из папок /etc/rcX.d, где X - это уровень запуска, на котором вы хотите, чтобы он выполнялся. 0, я верю, это уровень завершения работы Debian.

squillman
источник
Это информация об отключении, которая мне нужна. Спасибо за это, @squillman.
Harperville
1

Самый простой - изменить существующие скрипты, работает в моей системе, используется для звуков :)

  • Запустите, измените /etc/init.d/rc.local, добавьте ваш sh в конце файла, перед: (он будет выполнен прямо перед «экраном» входа)
  • завершение работы, изменение /etc/init.d/halt, добавление вашей sh в начале файла, сразу после начальных комментариев (это будет выполнено перед фактической командой выключения, которая вызывается этим файлом скрипта
  • перезагрузка, так же, как выключение, но в /etc/init.d/reboot
chickensk
источник
1

Начиная с Debian Jessie, старая initпрограмма была заменена на systemd!

Проверьте это сами. Запустите: ls -l /sbin/initи посмотрите, на что он указывает. В эти дни это указывает на systemd( /sbin/init -> /lib/systemd/systemd), более новую и лучшую программу инициализации.


ТАК ЧТО ВЫБРАННЫЕ И ДРУГИЕ ОТВЕТЫ ЗДЕСЬ СЕЙЧАС УСТАРЕЛИ !!!


* Хотя вы по-прежнему можете устанавливать сценарии по-старому с помощью инструментов System-V, в целом это не очень хорошая идея.

man systemd.service говорит: *

Если служба запрашивается под определенным именем, но файл конфигурации модуля не найден, systemd ищет сценарий инициализации SysV с тем же именем ... и динамически создает модуль службы из этого сценария. Это полезно для совместимости с SysV. Обратите внимание, что эта совместимость довольно полная, но не на 100%.


Для более новых систем Debian (например, Jessie, Stretch, Buster и т. Д.)

Это проще, чем вы думаете. (-:

Вот новый и предпочтительный способ установки программ загрузки или завершения работы.

С systemdвами первым хотим создать блок файл . Единичный файл - это в основном объявления, а не код.

Затем вы будете использовать systemctlкоманду, чтобы включить или запустить этот модуль.

systemdвыполняет большую часть работы за вас, упрощая, например, автоматический запуск критически важной программы в случае сбоя или иного уничтожения. Также он закрывает вашу программу, где и когда она должна по умолчанию, без дополнительной работы с вашей стороны.


Начните узнавать systemdздесь:

Из Debian и в других местах и т. Д. И т . П.


Справочные страницы для начала:

man systemd.unit - О файлах модуля в целом.
man systemd.service - О файлах модуля обслуживания, например, демонах и программах одиночного запуска.

man systemctl - Интерфейс пользователя командной строки
man journalctl- Просмотр журнала того, что сделал systemd

man systemd - о самой программе инициализации


Есть также множество других типов файлов модулей, например

man systemd.target - для групп и общих синхронизированных целей.

После того, как вы освоили основы, приведенные выше, перейдите к разделу, man -k systemdчтобы найти другие связанные справочные страницы.



Что бы вы ни делали, в Debian не используйте ничего из этого :

  • update-rc.d - установить и удалить ссылки сценария инициализации в стиле System-V
  • sysv-rc-conf - Конфигурация на уровне выполнения для SysV, как ссылки сценариев инициализации
  • runlevel - Печать предыдущего и текущего уровня запуска SysV
  • BUM- B oot U p M anager - графический редактор уровней запуска
  • systemadm- Графический интерфейс для системного и системного менеджера systemd
    (кстати, автор сказал мне по электронной почте, что он слишком сломан).


ПРИМЕР:

Этот файл модуля запускает демон NoIP.com при загрузке и выключает его при завершении работы.

Этот демон, время от времени, посылает свой текущий IP - адрес , чтобы обновить мой DDNS ( D инамической DNS ( D omain N AME S ERVER)) базы данных провайдера, при этом сохраняя свое доменное имя , указывающий на моем компьютере , где он путешествует.

Этот модуль находится в моей системе в этом файле настроек: /etc/systemd/system/noip2.service

Вот что находится в файле модуля:

#   Comments can only go at the beginning of the line!

[Unit]
Description=Start the NoIP IP update daemon.  This runs every 30 minutes and reports our current IP to NoIP.com to update Love2d.ddns.net.
Documentation=https://no-ip.com/
Documentation=file:///nobak/Installers/NoIP/noip-2.1.9-1/README.FIRST


[Service]
# 'forking' because process returns after starting daemon (traditional unix daemon).
Type=forking

# This program runs and returns, leaving the running daemon
ExecStart=/usr/local/bin/noip2

# Be in no hurry to start this.  Max nice is +19.
Nice=15

# If it dies for any reason, then restart it
Restart=always


[Install]
# Installs a hook to use this unit file when the system boots or shuts down
WantedBy=multi-user.target

Запустите файл модуля вручную (например, для тестирования):

  • начать с $ sudo systemctl start noip2.
  • перезапустите с $ sudo systemctl restart noip2.
  • остановиться с $ sudo systemctl stop noip2.

Сконфигурируйте систему для автоматического запуска файла модуля при запуске или завершении работы:

  • начать использовать с $ sudo systemctl enable noip2.
  • прекратить использование с $ sudo systemctl disable noip2.

Посмотреть журнал

  • $ sudo journalctl -u noip2
Эллиптический вид
источник