Назад | Перейти на главную страницу

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

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

как мне добавить 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%.


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

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

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

С участием 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-V
  • sysv-rc-conf - Конфигурация на уровне выполнения для SysV, например ссылки на сценарий инициализации
  • runlevel - Распечатать предыдущий и текущий уровень запуска SysV
  • BUM - 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