Каково максимально допустимое время запуска сценария запуска демона?
У меня есть сервер tomcat, запуск которого требует много времени, и я мог бы включить логику в сценарий запуска, чтобы проверить, успешно ли запущена служба или нет.
Тем не менее, у меня есть некоторые опасения по поводу потенциального бесконечного цикла для запуска демона, который может повлиять даже на запуск системы, если он настроен на запуск во время загрузки.
Тем не менее, я хочу вернуть правильное сообщение о выходе (успех / неудача).
Я мог бы реализовать некоторую логику тайм-аута, но я понятия не имею, что будет считаться приемлемым или неприемлемым временем запуска для сценария демона.
Кроме того, не имеет большого смысла останавливать инициализацию других служб, пока эта служба еще инициализируется.
Как уже было сказано, для демона не существует максимального или настраиваемого времени запуска. Если вы думаете, что демон вызывает запуск других демонов, вы можете изменить его последовательность запуска в конце.
Теперь я могу думать о трех способах устранения проблемы.
1) Очевидным шагом было бы включить журналы отладки для приложения. Я в основном работаю с RHEL и /etc/sysconfig/<daemon-name>
здесь можно установить уровень журнала.
2) Когда вы запускаете демон вручную, запустите его с помощью strace.
strace -ffttTo /tmp/daemon.out /etc/init.d/daemon start
Теперь в файле daemon.out обратите внимание на время, указанное в конце каждого системного вызова. Это в микросекундах. Определите вызов, который занимает большую часть времени.
Когда вы это обнаружите, снова запустите демон, на этот раз с помощью ltrace. Теперь, когда вы знаете о системном вызове, вызывающем ошибку, выясните, в какой библиотеке он застревает.
3) Напишите сценарий systemtap. Это не так просто, если у пользователя нет опыта написания / отладки с помощью stap.
probe syscall.*
{
( (pid) == target() )
printf("%s\n",name)
}
Это покажет все системные вызовы, которые будет выдавать целевой pid.
ПРИМЕЧАНИЕ. Не ставьте на первое место скобу. Я просто упомянул об этом, потому что это отличный инструмент для отладки ядра, и я не видел упоминания о нем на сайте (или, может быть, его не заметили). Вам необходимо установить пакеты kernel-debuginfo, kernel-debuginfo-common, kernel-devel, systemtap. Затем запустите сценарий как
stap <script_name.stp> -x pid
Мы можем дополнительно оснастить рассматриваемый системный вызов.
Для сценария запуска системы не существует «максимально допустимого времени запуска». Однако при длительном выполнении сценария сценарий запуска обычно отключает программу, которая занимает много времени в качестве фонового процесса или даже процесса «в». Таким образом, это предотвращает длительное время медленного выполнения процесса, прежде чем система будет «готова» к работе.