У меня есть очень хороший скрипт для использования в /etc/init.d. На самом деле, у меня их много, все они созданы с помощью Tanuki Java Service Wrapper.
Мне может показаться, что может быть простой шаблон для упаковки такого сценария оболочки, как сценарий upstart, но небольшое прибегание к гуглу не раскрывает его.
Я не помню, чтобы видел шаблон для этого. Немного иронично, однако, что технически это выскочка, которая в первую очередь запускает ваш скрипт 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файл задания.
Просто, чтобы завершить мысль, обычно это все, что нужно для полного выскочка файла в любом случае. Вся предварительная работа завершена, вся очистка выполнена, остается только сам сервис, который обычно добавляется с помощью:
В выскочке документация гласит, что уровни выполнения 3,4 и 5 не используются. Итак, вы просто должны использовать уровень выполнения 2.
djangofan
это было какое-то время, но я уверен, что 5 - система с запущенным GUI, по крайней мере, раньше.
Джозеф Роджерс
6
Так что одним из пунктов выскочки является простота написания.
В сценариях init.d много магии сценариев оболочки, которые повторяются снова и снова. Операторы case, отслеживание pidfile, строки комментариев lsb. Не очень понятно, как написать ХОРОШИЙ скрипт init.d, не прочитав его.
Если у вас уже были проблемы с написанием всего этого, то вам не нужна выскочка, если, как я упоминал в другом комментарии, вы не зависите от другой выскочки / события.
Но на самом деле выскочка делает вещи действительно простыми. Вам не нужно предварительно запускать, если вам не нужно настраивать такие вещи, как tmpdirs, ulimits или аргументы времени выполнения. Вы не должны нуждаться в пост-остановке, если не хотите убедиться, что вы убираете после службы (служба действительно должна очищаться после обычного выхода).
Часто гигантский сценарий init.d с множеством опций сводится к 10-15-строчной работе. У самых сложных сценариев init.d большая часть их логики может быть выгружена в предстартовые. Ключевым моментом здесь является то, что это всего лишь небольшой фрагмент кода для настройки среды для процесса, а не логика обработки start / stop / respawn / etc.
Самое сложное, и то, что люди чаще всего ошибаются, это знать, когда начинать / прекращать свою работу. start on runlevel [2345]кажется логичным, но игнорирует тот факт, что в этот момент сеть работает параллельно, как и монтируемые локальные файловые системы. Ключ в том, чтобы попытаться выяснить, какие именно минимальные ресурсы вам нужны (другие сервисы, файловые системы, сеть и т. Д.) Для запуска, и начать, когда это будет сделано. Большинство традиционных сетевых услуг должны делать start on (local-filesystems and net-device-up IFACE!=lo).
Я думал, что Upstart поддерживает обратную совместимость с сценариями инициализации в стиле SysV /etc/init.d. Вы должны иметь возможность просто использовать ваши сценарии инициализации без изменений.
Да, но порядок уже не так легко предсказать. Задания Upstart могут запускаться до / после запуска сценария rc2.d / S99mything. Поэтому, как только вы зависите от управляемой службы с выскочкой, вам нужна работа с выскочкой.
SpamapS
2
Как взломать, вы можете удалить ваши сценарии инициализации из определенных уровней выполнения, и вместо того, чтобы добавить кучу линий , как /etc/init.d/myservice startна /etc/rc.local, в правильном порядке. Это гарантирует, что ваши службы будут запущены последними, после всех других служб, в том числе запущенных сценариями инициализации Upstart.
Так что одним из пунктов выскочки является простота написания.
В сценариях init.d много магии сценариев оболочки, которые повторяются снова и снова. Операторы case, отслеживание pidfile, строки комментариев lsb. Не очень понятно, как написать ХОРОШИЙ скрипт init.d, не прочитав его.
Если у вас уже были проблемы с написанием всего этого, то вам не нужна выскочка, если, как я упоминал в другом комментарии, вы не зависите от другой выскочки / события.
Но на самом деле выскочка делает вещи действительно простыми. Вам не нужно предварительно запускать, если вам не нужно настраивать такие вещи, как tmpdirs, ulimits или аргументы времени выполнения. Вы не должны нуждаться в пост-остановке, если не хотите убедиться, что вы убираете после службы (служба действительно должна очищаться после обычного выхода).
Часто гигантский сценарий init.d с множеством опций сводится к 10-15-строчной работе. У самых сложных сценариев init.d большая часть их логики может быть выгружена в предстартовые. Ключевым моментом здесь является то, что это всего лишь небольшой фрагмент кода для настройки среды для процесса, а не логика обработки start / stop / respawn / etc.
Самое сложное, и то, что люди чаще всего ошибаются, это знать, когда начинать / прекращать свою работу.
start on runlevel [2345]
кажется логичным, но игнорирует тот факт, что в этот момент сеть работает параллельно, как и монтируемые локальные файловые системы. Ключ в том, чтобы попытаться выяснить, какие именно минимальные ресурсы вам нужны (другие сервисы, файловые системы, сеть и т. Д.) Для запуска, и начать, когда это будет сделано. Большинство традиционных сетевых услуг должны делатьstart on (local-filesystems and net-device-up IFACE!=lo)
.источник
Я думал, что Upstart поддерживает обратную совместимость с сценариями инициализации в стиле SysV
/etc/init.d
. Вы должны иметь возможность просто использовать ваши сценарии инициализации без изменений.источник
/etc/init.d/myservice start
на/etc/rc.local
, в правильном порядке. Это гарантирует, что ваши службы будут запущены последними, после всех других служб, в том числе запущенных сценариями инициализации Upstart.