У меня есть команда для запуска Apache, /etc/rc3.d
которая не выполняется при перезагрузке сервера. Скрипт называется S75Apache2
. Кто-то предположил, что это потому, что ссылка имеет заглавную букву "A" в имени, и она может работать, если ее переименовать в S75apache2
.
Может кто-нибудь подтвердить? Я искал документацию, но не нашел ответа. Я не могу проверить это без перезагрузки сервера (чего я бы предпочел не делать).
решение1
Скрипты инициализации Solaris — это боль. Большая буква «A» не имеет значения, есть скрипт, /etc/rc.d
который находит все файлы, /etc/rc3.d
начинающиеся с «S», и запускает их в порядке возрастания номеров.
Остается начать с основ:
Является ли
/etc/rc3.d/S75Apache2
набор исполняемым?Есть ли в этом скрипте строка '#!'? Правильная ли строка (нет непечатаемых байтов и т.п.)?
Если это скрипт bash или ksh, запустите его как
ksh -n /etc/rc3.d/S75Apache2 start
. Это покажет вам, есть ли в нем синтаксические ошибки.Если вы можете запустить этот скрипт как root, попробуйте:
/etc/rc3.d/S75Apache2 start
и/etc/rc3.d/S75Apache2 stop
Внимательно проверьте, запускается ли онhttpd
и останавливается лиhttpd
. По крайней мере, запустите скрипт с аргументами «start» и «stop» самостоятельно. Используйте ,set -x
чтобы увидеть, что делает скрипт во время выполнения. Проверьте, соответствует ли то, что он делает, тому, что вы считаете нужным.Внимательно прочитайте
/etc/rc3.d/S75Apache2
.PATH
при загрузке заполняется скудно, и ваш скрипт может не знать, где находятся некоторые исполняемые файлы во время загрузки, но может знать при запуске после загрузки. Постарайтесь не предполагать слишком многого — файлы могут не существовать, хотя вы думаете, что они существуют, и тому подобное.Убедитесь, что
KnnApache2
скрипт не существует в/etc/rc3.d
. Я полагаю, что Solarisinit
запустится (например)K76Apache2 stop
при переходе с уровня выполнения 3 на уровень выполнения 5.Убедитесь, что скрипт правильно изменяет идентификатор пользователя. Это, вероятно, не важно для 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", и вы найдете множество рецептов.