Як додати скрипт до запуску та відключення в 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пакет.


4

Ви можете зателефонувати своєму скрипту з /etc/rc.local перед рядком, у якому йде вихід 0

Що стосується вимкнення програми, я б запропонував розмістити сценарій у /etc/rc0.d . Вам потрібно назвати його великим регістром K , а потім двозначним номером, який визначає порядок запуску цих сценаріїв, а потім ім'я. Він буде викликаний параметром "стоп", але ви можете проігнорувати це для простого сценарію зупинки.


Чому б вам зайнятися rc.local, коли ви вже все-таки посварилися з /etc/rcX.d?
лоб

rc.local - це належне місце для простих запуску матеріалів - не потрібно мати справу з параметрами запуску / зупинки тощо. Але він не має можливості зупиняти процес. Речі rc0.d - це трохи хак.
Brent

3

Для запуску подивіться на це .

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


Це інформація про відключення, яка мені потрібна. Дякую за це, @squillman.
harperville

1

Найпростіше - це змінити існуючі сценарії, працює в моїй системі, використовується для звуків :)

  • запуск, модифікація /etc/init.d/rc.local, додавання вашого sh в кінці файлу, перед:
  • вимкнення, модифікація /etc/init.d/halt, додайте ваш sh на початку файлу, відразу після первинних коментарів (він буде виконаний перед фактичною командою shutdown, що викликається цим файлом сценарію
  • перезавантажити, як і вимкнення, але в /etc/init.d/reboot

1

З часів Дебіана Джессі, стару initпрограму замінили systemd!

Перевірте самі. Виконати: ls -l /sbin/initі подивитися, на що він вказує. У наші дні це вказує на systemd( /sbin/init -> /lib/systemd/systemd), нову та кращу програму ініціалізації.


Тож ХОЗЕН І ІНШІ ВІДПОВІДИ ТУТ НЕ ЗАРЕЖЕНО !!!


* Хоча ви все ще можете встановити сценарії старим способом за допомогою інструментів System-V, загалом це не дуже добре.

man systemd.service каже: *

Якщо сервіс запитується під певним іменем, але файл конфігурації одиниці не знайдено, systemd шукає сценарій init 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 - Конфігурація рівня запуску для посилань сценарію init як SysV
  • runlevel - Друкувати попередній та поточний рівень запуску SysV
  • BUM- B oot U p M anager - графічний редактор програмного рівня
  • systemadm- Графічний інтерфейс для системного менеджера та системного менеджера
    (BTW, автор сказав мені електронною поштою, що зараз він занадто зламаний.)


ПРИКЛАД:

Цей одиничний файл запускає демон NoIP.com під час завантаження, і вимикає його при закритті.

Цей демон час від часу надсилає мою поточну IP-адресу для оновлення бази даних провайдера DDNS ( D ynamic 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.