название в значительной степени подводит итог.
как мне добавить startup.sh и shutdown.sh моего серверного приложения в последовательность запуска и завершения работы ОС Debian?
В Debian сценарии загрузки и завершения работы служб и приложений следует размещать в /etc/init.d/
.
Debian предоставляет пример сценария /etc/init.d/skeleton
которые вы можете изменить по своему вкусу для вашего конкретного приложения.
Как только он будет установлен, позвоните:
# update-rc.d YOURAPP defaults
Чтобы Debian добавил /etc/rc?.d/
символические ссылки для вас.
Если вы предпочитаете меню или графический интерфейс, взгляните на sysv-rc-conf
или ksysv
пакет.
Вы можете вызвать свой сценарий из /etc/rc.localперед строкой, в которой говорится выход 0
Что касается закрытия вашего приложения, я бы предложил поместить скрипт в /etc/rc0.d. Вам нужно назвать его заглавными буквами K, а затем двухзначное число, указывающее порядок запуска этих сценариев, а затем имя. Он будет вызываться с параметром «стоп», но вы можете проигнорировать это для простого скрипта остановки.
Для стартапа взгляните на этот.
Для завершения работы создайте ссылку / скопируйте свой скрипт в одну из папок /etc/rcX.d, где X - это уровень запуска, на котором вы хотите, чтобы он выполнялся. Я считаю, что 0 - это уровень запуска Debian при завершении работы.
Самый простой - изменить существующие скрипты, работает в моей системе, используется для звуков :)
/etc/init.d/rc.local
, добавьте свой sh в конец файла перед: (он выполнит его прямо перед "экраном" входа в систему)/etc/init.d/halt
добавьте свой sh в начало файла сразу после начальных комментариев (он будет выполнен перед фактической командой выключения, которая вызывается этим файлом сценария/etc/init.d/reboot
Начиная с Debian Jessie, старый init
программа была заменена на systemd
!
Убедитесь сами. Бегать: ls -l /sbin/init
и посмотрите, на что он указывает. В наши дни это указывает на systemd
(/sbin/init -> /lib/systemd/systemd
), более новую и лучшую программу инициализации.
ТАК ВЫБРАННЫЕ И ДРУГИЕ ОТВЕТЫ ЗДЕСЬ УСТАРЕЛИ !!!
* Хотя вы все еще можете устанавливать скрипты старым способом с помощью инструментов System-V, в целом это не лучшая идея.
man systemd.service
говорит: *
Если служба запрашивается под определенным именем, но файл конфигурации модуля не найден, systemd ищет сценарий инициализации SysV с тем же именем ... и динамически создает служебный модуль из этого сценария. Это полезно для совместимости с SysV. Обратите внимание, что эта совместимость является полной, но не 100%.
Это проще, чем вы думаете. (-:
Вот новый и предпочтительный метод установки программ загрузки или завершения работы.
С участием systemd
вы сначала хотите создать единичный файл. Юнит-файл - это в основном объявления, а не код.
Тогда вы будете использовать systemctl
команда для включить или Начало этот блок.
systemd
выполняет большую часть работы за вас, облегчая, например, автоматический перезапуск критически важной программы в случае ее сбоя или иного завершения. Кроме того, он по умолчанию завершает работу вашей программы в нужном месте и в нужное время без дополнительной работы с вашей стороны.
Начать узнавать о systemd
Вот:
Из Debian и в другом месте и и т.д и и т.д.
Страницы руководства для начала:
man systemd.unit
- О файлах юнитов в целом
man systemd.service
- О файлах служебных единиц, например демоны и одноразовые программы.
man systemctl
- Пользовательский интерфейс командной строки
man journalctl
- Просмотр журнала того, что сделал systemd
man systemd
- О самой программе init
Также существует множество других типов файлов юнитов, например
man systemd.target
- для групп и общих синхронизируемых целей.
Как только вы усвоите основы, изложенные выше, приступайте к работе с man -k systemd
чтобы найти другие связанные страницы руководства.
Что бы вы ни делали, в Debian не используйте ни один из этих:
update-rc.d
- установить и удалить ссылки сценария инициализации в стиле System-Vsysv-rc-conf
- Конфигурация на уровне выполнения для SysV, например ссылки на сценарий инициализацииrunlevel
- Распечатать предыдущий и текущий уровень запуска SysVBUM
- Boot Uп Manager - графический редактор уровней запускаsystemadm
- Графический интерфейс для системы systemd и диспетчера службЭтот файл модуля запускает демон NoIP.com при загрузке и выключает его при завершении работы.
Этот демон время от времени отправляет мой текущий IP-адрес для обновления моего DDNS (Dдинамический DNS (Dдомен Nрадость Server)) в базе данных поставщика, таким образом сохраняя мое доменное имя, указывающее на мой компьютер, куда бы оно ни отправлялось.
Файлы этого модуля находятся в моей системе в этом файле настроек: /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