From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <454F14F9.7090902@stc.donpac.ru> Date: Mon, 06 Nov 2006 13:56:57 +0300 From: Eugene Prokopiev User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru-RU; rv:1.7.2) Gecko/20040808 X-Accept-Language: ru-ru, ru MIME-Version: 1.0 To: ALT Linux Community Content-Type: text/plain; charset=KOI8-R; format=flowed Content-Transfer-Encoding: 8bit Subject: [Comm] =?koi8-r?b?6dPQz8zY2s/Xwc7JxSBzdGFydC1zdG9wLWRhZW1vbg==?= X-BeenThere: community@lists.altlinux.org X-Mailman-Version: 2.1.9rc1 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: Mon, 06 Nov 2006 10:57:09 -0000 Archived-At: List-Archive: List-Post: Здравствуйте! Имеется тупая программа, которая не умеет создавать PID-файл, не умеет форкаться и освобождать терминал, однако ее требуется запустить как сервис средствами start-stop-daemon (т.к. других для этих целей, как я понял, у нас нет). Пример такой программы: # cat /usr/bin/myservice #!/bin/sh sleep 1000000 Стартовый скрипт: # cat /etc/init.d/myservice #!/bin/sh # # chkconfig: 2345 80 30 # description: myservice daemon # Do not load RH compatibility interface. WITHOUT_RC_COMPAT=1 # Source function library. . /etc/init.d/functions PIDFILE=/var/run/myservice.pid RETVAL=0 start() { action "Starting myservice service: " start-stop-daemon --quiet --start -b -m --pidfile $PIDFILE --exec /usr/bin/myservice RETVAL=$? return $RETVAL } stop() { action "Stopping myservice service: " start-stop-daemon --stop --quiet --pidfile $PIDFILE myservice RETVAL=$? return $RETVAL } restart() { stop sleep 1 start } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart) restart ;; condstop) if [ -e "$LOCKFILE" ]; then stop fi ;; condrestart) if [ -e "$LOCKFILE" ]; then restart fi ;; status) status --pidfile "$PIDFILE" --expect-user root -- myservice RETVAL=$? ;; *) echo "Usage: ${0##*/} {start|stop|reload|restart|condstop|condrestart|status}" RETVAL=1 esac exit $RETVAL Ведет он себя безобразно: [root@mydomain root]# ps aux | grep myservice root 5782 0.0 0.0 1372 440 pts/1 S 13:46 0:00 grep myservice [root@mydomain root]# service myservice status myservice is stopped [root@mydomain root]# service myservice start Starting myservice service: [ DONE ] [root@mydomain root]# ps aux | grep myservice root 5797 0.2 0.1 1604 812 ? S 13:47 0:00 /bin/sh /usr/bin/myservice [root@mydomain root]# service myservice status myservice is dead, but stale PID file exists [root@mydomain root]# cat /var/run/myservice.pid 5797 [root@mydomain root]# service myservice stop Stopping myservice service: [ DONE ] [root@mydomain root]# ps aux | grep myservice [root@mydomain root]# cat /var/run/myservice.pid 5797 Т.е. стартует, но статус уже показать не может, вроде останавливает, но PID-файл не удаляет. Что я сделал неправильно? Да, раскопки с помощью /bin/bash -x показывают, что: # start-stop-daemon --stop --test --exec /usr/bin/myservice --user-fallback-to-name --pidfile /var/run/myservice.pid --user root No /usr/bin/myservice found running; none killed. Почему, если: [root@mydomain root]# ps aux | grep myservice root 5845 0.0 0.1 1604 812 ? S 13:52 0:00 /bin/sh /usr/bin/myservice [root@mydomain root]# cat /var/run/myservice.pid 5845 ? происходит все на ALM 2.4 -- С уважением, Прокопьев Евгений