Скрипт запуска не выполняется после перезагрузки в Solaris

Скрипт запуска не выполняется после перезагрузки в Solaris

У меня есть команда для запуска Apache, /etc/rc3.dкоторая не выполняется при перезагрузке сервера. Скрипт называется S75Apache2. Кто-то предположил, что это потому, что ссылка имеет заглавную букву "A" в имени, и она может работать, если ее переименовать в S75apache2.

Может кто-нибудь подтвердить? Я искал документацию, но не нашел ответа. Я не могу проверить это без перезагрузки сервера (чего я бы предпочел не делать).

решение1

Скрипты инициализации Solaris — это боль. Большая буква «A» не имеет значения, есть скрипт, /etc/rc.dкоторый находит все файлы, /etc/rc3.dначинающиеся с «S», и запускает их в порядке возрастания номеров.

Остается начать с основ:

  1. Является ли /etc/rc3.d/S75Apache2набор исполняемым?

  2. Есть ли в этом скрипте строка '#!'? Правильная ли строка (нет непечатаемых байтов и т.п.)?

  3. Если это скрипт bash или ksh, запустите его как ksh -n /etc/rc3.d/S75Apache2 start. Это покажет вам, есть ли в нем синтаксические ошибки.

  4. Если вы можете запустить этот скрипт как root, попробуйте: /etc/rc3.d/S75Apache2 startи /etc/rc3.d/S75Apache2 stop Внимательно проверьте, запускается ли он httpdи останавливается ли httpd. По крайней мере, запустите скрипт с аргументами «start» и «stop» самостоятельно. Используйте , set -xчтобы увидеть, что делает скрипт во время выполнения. Проверьте, соответствует ли то, что он делает, тому, что вы считаете нужным.

  5. Внимательно прочитайте /etc/rc3.d/S75Apache2. PATHпри загрузке заполняется скудно, и ваш скрипт может не знать, где находятся некоторые исполняемые файлы во время загрузки, но может знать при запуске после загрузки. Постарайтесь не предполагать слишком многого — файлы могут не существовать, хотя вы думаете, что они существуют, и тому подобное.

  6. Убедитесь, что KnnApache2скрипт не существует в /etc/rc3.d. Я полагаю, что Solaris initзапустится (например) K76Apache2 stopпри переходе с уровня выполнения 3 на уровень выполнения 5.

  7. Убедитесь, что скрипт правильно изменяет идентификатор пользователя. Это, вероятно, не важно для Apache, учитывая, что ваш скрипт, вероятно, просто вызывает apachectl startнекоторые команды пролога, но если вы запускаете httpнапрямую, убедитесь, что httpdу результирующего процесса правильный идентификатор пользователя. Используйте sudoили что-нибудь в скрипте, чтобы сделать это правильно.

решение2

Оказывается, в скрипте запуска БЫЛА ошибка: переменная LD_LIBRARY_PATH была установлена ​​неправильно. Определение этого в скрипте исправит проблему.

Для дальнейшего использования имеется файл журнала, содержащий сообщения о запуске, содержащие ошибку, которая привела к решению нашей проблемы. Файл:

/var/svc/log/milestone-multi-user-server:default.log

Я нашел ссылку на это в файле /etc/rc3.d/README. Еще один день, еще одна крупица знаний!

решение3

Вы установили свой собственный Apache (т. е. скомпилировали его из исходного кода) или просто используете Apache, который предустановлен в Solaris 10?

Ну, это на самом деле не имеет значения, если у вас Solaris 10 (или более поздняя версия), как вы говорите.вам вообще не следует использовать скрипты инициализации Solaris, вам следует использовать SMF. (да, технически сценарии инициализации все еще поддерживаются, но, как вы отметили, они доставляют неудобства, а SMF гораздо лучше)

Чтобы запустить (сейчас, а также автоматически после перезагрузки) веб-сервер Apache 2.2, который предустановлен вместе с Solaris 10, просто сделайте следующее:

svcadm включить /network/http:apache2

Если вы развернули свой собственный Apache, то вам нужно создать манифест SMF, импортировать манифест и вперед. Просто погуглите "SMF Solaris", и вы найдете множество рецептов.

Связанный контент