З init.d наверх, чи є міст?


11

У мене ідеально хороший сценарій для використання в /etc/init.d. Насправді у мене їх дуже багато, всі створені за допомогою сервісної обгортки Tanuki Java.

Мені здається, що може бути простий шаблон для завершення такого сценарію оболонки, як початковий сценарій, але трохи гуглінг не виявляє жодного.

Я щось пропускаю?

Відповіді:


9

Я не пам'ятаю, щоб бачити шаблон для цього. Однак це трохи іронічно, що технічно це його новаторка, яка починає ваш сценарій init.d, в першу чергу завдяки завдань сумісної сумісності rc та rcS.

Я б розглядав можливість переписувати все, що у вас є, як вищу роботу, проте я знаю, що деякі сценарії важко конвертувати, тому ось, що я робив на деякий час зі свого сценарію:

description "xyz"
author "xyz"
start on runlevel 5
stop on runlevel [!5]

pre-start script
    # do my work here to start the service
end script

post-stop script
    # do work here to stop the service
end script

Тепер, залежно від характеру послуги, незалежно від того, зберігається вона чи роздрібнюється, вам може знадобитися додати expect forkабо taskдо файла завдання.

Просто для завершення думки, як правило, це все, що потрібно, щоб все-таки файл повного запуску. Всі роботи, що розпочалися перед початком роботи, виконані, і все очищення зроблено, єдине, що залишилося - це сама послуга, яка зазвичай додається із:

exec service_cmd

На початку документація говорить про те, що рівні запуску 3,4 та 5 не використовуються. Отже, ви просто повинні скористатись рівнем 2.
djangofan

минув певний час, але я впевнений, що 5 запрацює система з графічним інтерфейсом, принаймні, раніше.
Джозеф Роджерс

6

Отже, одним із пунктів запуску завдань є простота написання.

У скриптах init.d є багато магії оболонки, яка повторюється знову і знову. Виписки справи, відстеження pidfile, рядки коментарів lsb. Не дуже зрозуміло, як написати хороший сценарій init.d, не прочитавши його.

Якщо ви вже зіткнулися з проблемою написання всього цього, то вам не потрібна робота на вищому рівні, якщо, як я вже згадував в іншому коментарі, ви не залежите від іншої початкової роботи / події.

Але насправді, на початку роботи все дуже просто. Вам не знадобиться попередній запуск, якщо вам не потрібно налаштовувати такі речі, як аргументи tmpdirs, ulimits або runtime. Вам не знадобиться після зупинки, якщо ви не хочете переконатися, що ви прибрали після послуги (сервіс дійсно повинен прибиратись після нормального виходу).

Часто гігантський скрипт init.d з багатьма параметрами зводиться до 10 - 15 рядкової роботи на початку. Найскладніші сценарії init.d можуть мати більшу частину своєї логіки, скинутої до початку запуску. Ключовим є те, що це лише невеликий фрагмент коду для налаштування середовища для процесу, а не логіка для обробки запуску / зупинки / відновлення / тощо.

Найскладніша частина - та, з якою люди найчастіше помиляються, - це знати, коли розпочати / зупинити свою роботу. start on runlevel [2345]здається логічним, але ігнорує той факт, що мережа з'являється паралельно в цей момент, як і місцеві кріплення файлової системи. Ключовим моментом є спробувати визначити саме мінімально необхідні речі (інші сервіси, файлові системи, мережу тощо), щоб розпочати роботу, і почати, коли це буде зроблено. Більшість традиційних мережевих послуг повинні робити start on (local-filesystems and net-device-up IFACE!=lo).


3

Я думав, що Upstart підтримує сумісність із зворотною сумісністю зі сценаріями init у стилі SysV /etc/init.d. Ви можете мати можливість просто використовувати свої сценарії init без змін.


Так, але порядок передбачити вже не так просто. Завдання для запуску можуть починатися до / після запуску сценарію rc2.d / S99mything. Отже, як тільки ви залежите від послуги, керованої на початку роботи, вам потрібна робота на вищому рівні.
SpamapS

2
Як зламати, ви можете видалити ваші системні сценарії запуску з певних рівнів виконання, і замість того, щоб додати купу ліній , як /etc/init.d/myservice startна /etc/rc.local, в правильному порядку. Це забезпечить останню запуск ваших служб після всіх інших служб, у тому числі тих, які розпочаті сценаріями Upstart init.
Райан К. Томпсон,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.