Скрипт оболочки, запускающий дочерние процессы
Отказ от ответственности: я совершенно новичок в сценариях оболочки, но у меня есть небольшой опыт работы с другими языками, такими как PHP и Obj-C.
Я пишу свой первый скрипт-демон. Вот цели:
- Я хочу, чтобы он работал в фоновом режиме
- Я хочу, чтобы он запускался скриптом init.d, который включает команды start/stop/restart
- Я хочу, чтобы каждый процесс в цикле запускал свой собственный подпроцесс.
- Когда родительский процесс, запущенный сценарием init.d, уничтожен, я хочу, чтобы подпроцессы также умерли.
По сути, я ищу такое же поведение, которое, по-видимому, очень распространено среди программного обеспечения, такого как apache, spamd, dovecot и т. Д. Но, основываясь на моих исследованиях, я не нашел ни одного простого ответа относительно того, как это такие вещи достигнуты.
Любая помощь очень ценится.
2 ответа
Вы найдете много очень полезной информации, прочитав Управление процессами.
Кроме того, взгляните на свой существующий init.d
сценарии и использовать их в качестве моделей, как вы пишете свои собственные. Имейте в виду, однако, что некоторые из них могут выстоять. Поэтому постарайтесь не вырабатывать вредных привычек.
Вы, вероятно, захотите написать свои скрипты в оболочке Bourne (sh
), а не Bash, но вы можете многое узнать о том, что применимо как к чтению часто задаваемых вопросов Bash, так и к ошибкам Bash.
Вот шаги.
Давайте скажем ваш скрипт / opt / path / test. Убедитесь, что его исполняемый файл
Убедитесь, что следующий набор строк в верхней части вашего скрипта, сразу после "#!/ Bin / bash"
Для RedHat и двоюродных братьев:
chkconfig: - Sequence # & Level, который вы хотите запустить "Например:- 91 35"
описание: описание вашего процесса DAEMON
имя процесса: имя демона
Посмотрите пример сценария в пути /etc/init.d и попробуйте имитировать процесс запуска / остановки / перезапуска... [БОЛЬШОЙ ШАГ... не вдаваясь в детали]
Завершите "&" для запуска вашего сценария в фоновом режиме в сценарии
Например:- " /opt/path/test & "
Скопируйте скрипт в каталог /etc/init.d
Нет делать chkconfig
chkconfig - добавить тест
тест chkconfig включен
Верификация
chkconfig - список | тест grep
Сделайте /etc/init.d/test stop / start / restart.. убедитесь, что ваш процесс запущен.