* [Comm] Использование start-stop-daemon @ 2006-11-06 10:56 Eugene Prokopiev 2006-11-06 11:24 ` Eugene Prokopiev 0 siblings, 1 reply; 8+ messages in thread From: Eugene Prokopiev @ 2006-11-06 10:56 UTC (permalink / raw) To: ALT Linux Community Здравствуйте! Имеется тупая программа, которая не умеет создавать 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 -- С уважением, Прокопьев Евгений ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Comm] Использование start-stop-daemon 2006-11-06 10:56 [Comm] Использование start-stop-daemon Eugene Prokopiev @ 2006-11-06 11:24 ` Eugene Prokopiev 2006-11-06 13:41 ` Eugene Prokopiev 0 siblings, 1 reply; 8+ messages in thread From: Eugene Prokopiev @ 2006-11-06 11:24 UTC (permalink / raw) To: ALT Linux Community > Т.е. стартует, но статус уже показать не может, вроде останавливает, но > PID-файл не удаляет. Что я сделал неправильно? Статус не показывает, т.к. status из /etc/init.d/functions в такой ситауации не работает. Нужно, видимо, опираться на start-stop-daemon --stop --test: [root@mydomain root]# start-stop-daemon --stop --test --pidfile /var/run/myservice.pid --user root Would send signal 15 to 5845. Как это превратить в myservice is running? В /etc/init.d примера не нашел, все используют status. PID-файл и не должен удаляться, так написано в мане. Но есть другая проблема: [root@mydomain root]# ps aux | grep myservice [root@mydomain root]# start-stop-daemon --quiet --start -b -m --pidfile /var/run/myservice.pid --user myservice --exec /usr/bin/myservice [root@mydomain root]# ps aux | grep myservice root 6129 1.0 0.1 1612 824 ? S 14:22 0:00 /bin/sh /usr/bin/myservice Почему myservice стартует от root? Пользователь myservice есть, при указании несуществующего получаю: start-stop-daemon: user `myservice1' not found -- С уважением, Прокопьев Евгений ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Comm] Использование start-stop-daemon 2006-11-06 11:24 ` Eugene Prokopiev @ 2006-11-06 13:41 ` Eugene Prokopiev 2006-11-06 15:00 ` Dmitry V. Levin 0 siblings, 1 reply; 8+ messages in thread From: Eugene Prokopiev @ 2006-11-06 13:41 UTC (permalink / raw) To: ALT Linux Community > Но есть другая проблема: > > [root@mydomain root]# ps aux | grep myservice > [root@mydomain root]# start-stop-daemon --quiet --start -b -m --pidfile > /var/run/myservice.pid --user myservice --exec /usr/bin/myservice > [root@mydomain root]# ps aux | grep myservice > root 6129 1.0 0.1 1612 824 ? S 14:22 0:00 /bin/sh > /usr/bin/myservice > > Почему myservice стартует от root? > > Пользователь myservice есть, при указании несуществующего получаю: > > start-stop-daemon: user `myservice1' not found strace вообще не показывает попыток сменить uid: [root@mydomain root]# strace -f start-stop-daemon --start --user myservice --exec /usr/bin/myservice &> daemon.strace [root@mydomain root]# grep myservice daemon.strace execve("/sbin/start-stop-daemon", ["start-stop-daemon", "--start", "--user", "myservice", "--exec", "/usr/bin/myservice"], [/* 34 vars */]) = 0 stat64("/usr/bin/myservice", {st_mode=S_IFREG|0755, st_size=25, ...}) = 0 execve("/usr/bin/myservice", ["/usr/bin/myservice"], [/* 34 vars */]) = 0 open("/usr/bin/myservice", O_RDONLY|O_LARGEFILE) = 3 есть только такое: open("/etc/passwd", O_RDONLY) = 3 fcntl64(3, F_GETFD) = 0 fcntl64(3, F_SETFD, FD_CLOEXEC) = 0 fstat64(3, {st_mode=S_IFREG|0644, st_size=2678, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x124000 read(3, "root:x:0:0:System Administrator:"..., 4096) = 2678 close(3) = 0 и что бы это значило? -- С уважением, Прокопьев Евгений ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Comm] Использование start-stop-daemon 2006-11-06 13:41 ` Eugene Prokopiev @ 2006-11-06 15:00 ` Dmitry V. Levin 2006-11-06 16:50 ` Eugene Prokopiev 0 siblings, 1 reply; 8+ messages in thread From: Dmitry V. Levin @ 2006-11-06 15:00 UTC (permalink / raw) To: ALT Linux general discussion list [-- Attachment #1: Type: text/plain, Size: 846 bytes --] On Mon, Nov 06, 2006 at 04:41:28PM +0300, Eugene Prokopiev wrote: > > Но есть другая проблема: > > > > [root@mydomain root]# ps aux | grep myservice > > [root@mydomain root]# start-stop-daemon --quiet --start -b -m --pidfile > > /var/run/myservice.pid --user myservice --exec /usr/bin/myservice > > [root@mydomain root]# ps aux | grep myservice > > root 6129 1.0 0.1 1612 824 ? S 14:22 0:00 /bin/sh > > /usr/bin/myservice > > > > Почему myservice стартует от root? > > > > Пользователь myservice есть, при указании несуществующего получаю: > > > > start-stop-daemon: user `myservice1' not found > > strace вообще не показывает попыток сменить uid: Рекомендую использовать функции start_daemon/stop_daemon. См. тж. http://lists.altlinux.org/pipermail/devel/2006-November/038198.html -- ldv [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Comm] Использование start-stop-daemon 2006-11-06 15:00 ` Dmitry V. Levin @ 2006-11-06 16:50 ` Eugene Prokopiev 2006-11-06 20:17 ` Eugene Prokopiev 2006-11-06 20:54 ` Dmitry V. Levin 0 siblings, 2 replies; 8+ messages in thread From: Eugene Prokopiev @ 2006-11-06 16:50 UTC (permalink / raw) To: ALT Linux Community > Рекомендую использовать функции start_daemon/stop_daemon. > См. тж. > http://lists.altlinux.org/pipermail/devel/2006-November/038198.html Спасибо. Сейчас имею: # cat /usr/bin/devman #!/bin/sh sleep 1000000 # cat /etc/init.d/devman #!/bin/sh # # /etc/init.d/devman # # Startup script for devman # # chkconfig: - 85 15 # description: Device Manager # processname: devman # WITHOUT_RC_COMPAT=1 # Source function library. . /etc/init.d/functions PIDFILE=/var/run/devman.pid LOCKFILE=/var/lock/subsys/devman USER=devman RETVAL=0 start() { start_daemon --lockfile "$LOCKFILE" --make-pidfile --pidfile "$PIDFILE" --set-user "$USER" -- devman RETVAL=$? return $RETVAL } stop() { stop_daemon --pidfile "$PIDFILE" --lockfile "$LOCKFILE" --expect-user root --displayname devman su RETVAL=$? return $RETVAL } restart() { stop 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 ;; condreload) if [ -e "$LOCKFILE" ]; then reload fi ;; status) status --pidfile "$PIDFILE" --expect-user root --displayname devman su RETVAL=$? ;; *) msg_usage "${0##*/} {start|stop|reload|restart|condstop|condrestart|condreload|status}" RETVAL=1 esac exit $RETVAL Работает это так: [root@devman ~]# ps aux | grep devman root 9651 0.0 0.4 1584 468 pts/0 S+ 22:47 0:00 grep devman [root@devman ~]# service devman start Starting devman service: [ DONE ] [root@devman ~]# ps aux | grep devman root 9662 1.5 1.0 2000 964 ? Ss 22:47 0:00 /bin/su -s /bin/sh -l devman -c /usr/bin/devman devman 9664 1.0 0.9 2064 852 ? S 22:47 0:00 /bin/sh /usr/bin/devman devman 9678 0.0 0.3 1408 372 ? S 22:47 0:00 sleep 1000000 root 9680 0.0 0.4 1580 464 pts/0 S+ 22:47 0:00 grep devman [root@devman ~]# service devman stop Stopping devman service: [ DONE ] [root@devman ~]# ps aux | grep devman devman 9678 0.0 0.3 1408 372 ? S 22:47 0:00 sleep 1000000 root 9706 0.0 0.4 1584 468 pts/0 S+ 22:47 0:00 grep devman Почему процесс sleep не останавливается? -- С уважением, Прокопьев Евгений ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Comm] Использование start-stop-daemon 2006-11-06 16:50 ` Eugene Prokopiev @ 2006-11-06 20:17 ` Eugene Prokopiev 2006-11-06 20:54 ` Dmitry V. Levin 1 sibling, 0 replies; 8+ messages in thread From: Eugene Prokopiev @ 2006-11-06 20:17 UTC (permalink / raw) To: ALT Linux Community Решил попробовать вместо shell-скрипта использовать нечто более приближенное к тому, что должно заработать в итоге. Получилось еще хуже. Имеется Server.class - класс java, внутри которого тот же самый sleep, что и в shell-версии. В том же каталоге есть shell-cкрипт, который его запускает: # cat server.sh #!/bin/sh java Server Находясь в этом каталоге, я могу запустить скрипт и в ps увидеть /bin/sh ./server.sh и /bin/sh /usr/bin/java Server Теперь пробую сделать это чуть более правильно: # export PATH=$PATH:. # . /etc/init.d/functions # start_daemon --make-pidfile --pidfile /var/run/devman.pid --set-user devman --displayname devman -- server.sh # Не получаю ни сообщения об удаче или неудаче, ни /var/run/devman.pid, ни процессов в ps Что я делаю неправильно? Да, к вопросу об использовании Jakarta Commons Daemon в стиле Tomcat - примеры у меня не заработали, в соответствующей рассылке не помогли, поэтому решил выбрать более простой путь, который, оказывается, тоже не совсем прост ... -- С уважением, Прокопьев Евгений ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Comm] Использование start-stop-daemon 2006-11-06 16:50 ` Eugene Prokopiev 2006-11-06 20:17 ` Eugene Prokopiev @ 2006-11-06 20:54 ` Dmitry V. Levin 2006-11-06 21:10 ` Eugene Prokopiev 1 sibling, 1 reply; 8+ messages in thread From: Dmitry V. Levin @ 2006-11-06 20:54 UTC (permalink / raw) To: ALT Linux Community [-- Attachment #1: Type: text/plain, Size: 372 bytes --] On Mon, Nov 06, 2006 at 07:50:29PM +0300, Eugene Prokopiev wrote: > [root@devman ~]# ps aux | grep devman > devman 9678 0.0 0.3 1408 372 ? S 22:47 0:00 sleep > 1000000 > root 9706 0.0 0.4 1584 468 pts/0 S+ 22:47 0:00 grep devman > > Почему процесс sleep не останавливается? shell завершился, sleep остался. -- ldv [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Comm] Использование start-stop-daemon 2006-11-06 20:54 ` Dmitry V. Levin @ 2006-11-06 21:10 ` Eugene Prokopiev 0 siblings, 0 replies; 8+ messages in thread From: Eugene Prokopiev @ 2006-11-06 21:10 UTC (permalink / raw) To: ALT Linux Community Dmitry V. Levin пишет: > On Mon, Nov 06, 2006 at 07:50:29PM +0300, Eugene Prokopiev wrote: > >>[root@devman ~]# ps aux | grep devman >>devman 9678 0.0 0.3 1408 372 ? S 22:47 0:00 sleep >>1000000 >>root 9706 0.0 0.4 1584 468 pts/0 S+ 22:47 0:00 grep devman >> >>Почему процесс sleep не останавливается? > > > shell завершился, sleep остался. Это понятно ... А как добиться того, чтобы sleep завершался тоже? Если /usr/bin/devman запустить вручную, а затем сделать kill PID, то sleep завершится. Требуется сделать то же самое для service devman stop -- С уважением, Прокопьев Евгений ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2006-11-06 21:10 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2006-11-06 10:56 [Comm] Использование start-stop-daemon Eugene Prokopiev 2006-11-06 11:24 ` Eugene Prokopiev 2006-11-06 13:41 ` Eugene Prokopiev 2006-11-06 15:00 ` Dmitry V. Levin 2006-11-06 16:50 ` Eugene Prokopiev 2006-11-06 20:17 ` Eugene Prokopiev 2006-11-06 20:54 ` Dmitry V. Levin 2006-11-06 21:10 ` Eugene Prokopiev
ALT Linux Community general discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 community community/ http://lore.altlinux.org/community \ mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com public-inbox-index community Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.community AGPL code for this site: git clone https://public-inbox.org/public-inbox.git