From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <43A79597.8000303@elecom.ru> Date: Mon, 19 Dec 2005 21:24:39 -0800 From: Dmitry Vodennikov User-Agent: Mozilla Thunderbird 1.0.7 (Windows/20050923) X-Accept-Language: ru-ru, ru MIME-Version: 1.0 To: shigorin@gmail.com, ALT Linux Community Subject: Re: [Comm] Re: init.d =?KOI8-R?Q?c=CB=D2=C9=D0=D4=D9_=C4=CC=D1?= =?KOI8-R?Q?_apache/samba_=CF=D0=D5=D3=CB=C1=C0=D4_=DE=D5=D6=C9=C5_?= =?KOI8-R?Q?=DC=CB=DA=C5=CD=CC=D1=D2=D9?= References: <133457338.20051214231926@cyberdude.ru> <20051214211713.GC2918@osdn.org.ua> In-Reply-To: <20051214211713.GC2918@osdn.org.ua> Content-Type: multipart/mixed; boundary="------------060702000605030407070302" Cc: X-BeenThere: community@lists.altlinux.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: ALT Linux Community List-Id: ALT Linux Community List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Dec 2005 05:25:02 -0000 Archived-At: List-Archive: List-Post: This is a multi-part message in MIME format. --------------060702000605030407070302 Content-Type: text/plain; charset=KOI8-R; format=flowed Content-Transfer-Encoding: 8bit Michael Shigorin пишет: > On Wed, Dec 14, 2005 at 11:19:26PM +0300, Vlad Borisoff wrote: > >>В случае, если запущены несколько экземпляров apache и/или >>samba с разными конфигурационными файлами, /etc/init.d/httpd* >>/etc/init.d/smb* скрипты опускают все экземляры (поднимаются >>экземляры без проблем). > > > Да. > > >>Проблема с /etc/init.d/httpd связана, как я понял с тем, что >>программа start-stop-daemon учитывает не только pidfile, >>но и имя процесса: таким образом убивая все процессы с >>именем libhttpd.ep (ну и к тому же, ниже вызова функции >>stop_daemon libhttpd.ep дополниельно убиваются через killall). > > > Да... источник проблемы, которая *редко* приводит к залипанию > одного из детишек на :80 (или где ещё) и как следствие -- морозит > перезапуск сервера -- где-то сильно глубоко, судя по обсуждению > в апачевых рассылках. > > Пришлось внедрить такой workaround, до этого он жил > в рестарт-скрипте monit у нас. > > >>Существует ли какое-либо простое решение организации >>запуска/останова нескольких экземпляров процессов >>apache/samba в дистрибутиве ALT Linux? или это считается >>абсолютно ненужным и совершенно не стоящим внимания? Что-то начало треда я пропустил... Но судя по контексту решение есть. У меня нормально пускаются/останавливаются несколько отдельных httpd серверов. Вот в аттаче один из скриптов /etc/rc.d/init.d/httpd* Технология такая: 1. делаем ln -s /usr/sbin/httpd /usr/sbin/httpd-whatever 2. добавляем юзера whatever, под которым будет работать сервер 3. скрипт копируется в /etc/rc.d/init.d/httpd-whatever, в нем везде меняем gysmeteo на whatever (везде - это переменные BINARY PIDFILE PERLPIDFILE LOCKFILE CFGFILE STATUSURL) 4. Осталось только создать нужную структуру каталогов для whatever и правильно написать httpd.conf ls ~gysmeteo/* /home/gysmeteo/httpd: conf logs modules /home/gysmeteo/tmp: mc-gysmeteo /home/gysmeteo/www: cgi-bin html icons protected-cgi-bin --------------060702000605030407070302 Content-Type: text/plain; name="httpd-gysmeteo" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="httpd-gysmeteo" #! /bin/sh # # httpd Start/Stop the Apache Web Server # # chkconfig: 345 80 15 # description: Apache is a World Wide Web server. It is used to serve \ # HTML files and CGI. # processname: httpd # pidfile: /var/run/httpd.pid # config: /etc/httpd/conf/httpd.conf WITHOUT_RC_COMPAT=1 # Source function library. . /etc/init.d/functions BINARY=/usr/sbin/httpd-gysmeteo PIDFILE=/var/run/httpd-gysmeteo.pid PERLPIDFILE=/var/run/httpd-perl-gysmeteo.pid LOCKFILE=/var/lock/subsys/httpd-gysmeteo RETVAL=0 #vod CFGFILE=/home/gysmeteo/httpd/conf/httpd.conf export TMPDIR=/tmp ### Hack for bad hostname configuration #vod thehost=`hostname` #vod hostname -i 1>/dev/null 2>/dev/null|| hostname localhost ### Hack for Status LYNX="lynx -dump" STATUSURL="http://www.gysmeteo.ru/server-status" # Change the major functions into functions. moduleargs() { moduledir=/usr/lib/apache moduleargs= for module in ${moduledir}/*.so ; do if [ -x ${module} ] ; then module=`echo ${module} | sed -e 's/.*\///g; s/^mod_//g; s/^lib//g; s/\.so//g;'| tr '[:lower:]' '[:upper:]'` moduleargs="${moduleargs} -DHAVE_$module" fi done echo ${moduleargs} } conftest() { # TODO: translatable form? action "Checking configuration sanity for `basename $BINARY`: " \ "$BINARY" -t `moduleargs` $DEFINE -f "$CFGFILE" RETVAL=$? return $RETVAL } start() { if [ "$1" != "again" ]; then if status --pidfile "$PERLPIDFILE" --expect-user root \ --expect-user root -- httpd-perl >&/dev/null; then echo "Warning: httpd-perl is already running, check 'service `basename $BINARY` status' now" passed "httpd-perl already running" fi fi start_daemon --pidfile "$PIDFILE" --lockfile "$LOCKFILE" \ --expect-user root --name libhttpd.ep -- $BINARY -f "$CFGFILE" RETVAL=$? return $RETVAL } stop() { stop_daemon --pidfile "$PIDFILE" --lockfile "$LOCKFILE" \ --expect-user root --name libhttpd.ep -- $BINARY if [ "$1" != "nocheck" -a -f "$PERLPIDFILE" ]; then echo "Warning: httpd-perl is running, check 'service httpd-perl extendedstatus'" passed "httpd-perl already running" fi RETVAL=$? return $RETVAL } reload() { msg_reloading `basename $BINARY` stop_daemon --pidfile "$PIDFILE" \ --expect-user root --name libhttpd.ep -HUP -- $BINARY RETVAL=$? return $RETVAL } restart() { stop nocheck conftest || _exit $? start again } briefstatus() { status --pidfile "$PIDFILE" --expect-user root \ --expect-user root --name libhttpd.ep -- $BINARY RETVAL=$? return $RETVAL } extendedstatus() { if briefstatus >/dev/null; then RETVAL=$? $LYNX $STATUSURL | awk ' /process$/ { print; exit } { print } ' else RETVAL=$? msg_not_running "`basename $BINARY`" echo fi return $RETVAL } _exit() { hostname $thehost exit $1 } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart) restart ;; reload|graceful) if [ -e /usr/lib/apache/mod_jserv.so ]; then restart else reload fi ;; check|configtest) conftest _exit $? ;; condstop) if [ -e "$LOCKFILE" ]; then stop fi ;; update|condrestart) if [ -e "$LOCKFILE" ]; then restart fi ;; condreload) if [ -e "$LOCKFILE" ]; then reload fi ;; extendedstatus) extendedstatus ;; status) briefstatus ;; *) msg_usage "${0##*/} {start|stop|reload|restart|check|configtest|condstop|condrestart|condreload|status}" RETVAL=1 esac _exit $RETVAL --------------060702000605030407070302--