Отже, одним із пунктів запуску завдань є простота написання.
У скриптах 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)
.