Bug 27531 - status
Summary: status
Status: ASSIGNED
Alias: None
Product: Sisyphus
Classification: Development
Component: starman (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: Vladimir Lettiev
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-07-10 09:51 MSK by Chess
Modified: 2017-05-15 15:09 MSK (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Chess 2012-07-10 09:51:22 MSK
service starman status
starman is dead, but stale PID file exists

ps auxwwww | grep starman

_starman 11344  0.0  0.6  44396  3664 ?        Ss   Jul09   0:08 starman master --user _starman --group _starman --daemonize --error-log=/var/log/starman/error.log --access-log=/var/log/starman/access.log --pid /var/run/starman.pid --listen 127.0.0.1:3000 --workers 10 -a /var/www/webapps/test/script/payment_web psgi

cat /var/run/starman.pid
11344
Comment 1 Vladimir Lettiev 2012-07-10 11:51:49 MSK
starman меняет имя процесса, как и показано в выводе команды ps.

start-stop-daemon сверяет то, то что передано в параметре --name с содержимым /proc/<PID>/stat, где содержится первые 15 символов имени процесса, в данном случае это "starman master ". Судя по коду /etc/init.d/functions передать параметр --name с пробелами невозможно, поэтому придётся в init-скрипте starman дублировать код из /etc/init.d/functions для status и stop. Или, как вариант, повесить фич-реквест на service?
Comment 2 Chess 2013-03-21 16:18:20 MSK
(В ответ на комментарий №1)
> starman меняет имя процесса, как и показано в выводе команды ps.
> 
> start-stop-daemon сверяет то, то что передано в параметре --name с содержимым
> /proc/<PID>/stat, где содержится первые 15 символов имени процесса, в данном
> случае это "starman master ". Судя по коду /etc/init.d/functions передать
> параметр --name с пробелами невозможно, поэтому придётся в init-скрипте starman
> дублировать код из /etc/init.d/functions для status и stop. Или, как вариант,
> повесить фич-реквест на service?

А чем плох такой вариант

--- starman.orig        2013-03-21 12:17:03.856200891 +0000
+++ starman     2013-03-21 12:17:09.314201894 +0000
@@ -31,7 +31,7 @@
 
 stop()
 {
-       stop_daemon --pidfile "$PIDFILE" --lockfile "$LOCKFILE" --expect-user _starman --retry -15/300 --name starman -- starman
+       action $"Stopping starman service:" start-stop-daemon --stop --pidfile $PIDFILE
        RETVAL=$?
        return $RETVAL
 }
Comment 3 Dmitry V. Levin 2013-03-21 17:01:09 MSK
(In reply to comment #2)
> (В ответ на комментарий №1)
> > starman меняет имя процесса, как и показано в выводе команды ps.
> > 
> > start-stop-daemon сверяет то, то что передано в параметре --name с содержимым
> > /proc/<PID>/stat, где содержится первые 15 символов имени процесса, в данном
> > случае это "starman master ". Судя по коду /etc/init.d/functions передать
> > параметр --name с пробелами невозможно, поэтому придётся в init-скрипте starman
> > дублировать код из /etc/init.d/functions для status и stop. Или, как вариант,
> > повесить фич-реквест на service?
> 
> А чем плох такой вариант
> 
> --- starman.orig        2013-03-21 12:17:03.856200891 +0000
> +++ starman     2013-03-21 12:17:09.314201894 +0000
> @@ -31,7 +31,7 @@
> 
>  stop()
>  {
> -       stop_daemon --pidfile "$PIDFILE" --lockfile "$LOCKFILE" --expect-user
> _starman --retry -15/300 --name starman -- starman
> +       action $"Stopping starman service:" start-stop-daemon --stop --pidfile
> $PIDFILE
>         RETVAL=$?
>         return $RETVAL
>  }

Тем, что убьет не глядя любой процесс с указанным pid'ом.
Comment 4 Chess 2013-03-21 18:16:10 MSK
(В ответ на комментарий №3)
> (In reply to comment #2)
> > (В ответ на комментарий №1)
> 
> Тем, что убьет не глядя любой процесс с указанным pid'ом.

но pid записал starman при запуске, а не mysql например, убьет он того кого нужно

Это что хуже того что init скрипт вообще не может убить starman и приходится делать чтото вроде pkill -9 starman && service starman start
если все равно рабочего решения нет

а интересно, systemd что убивает не по pid-у который поймал при запуске?
Comment 5 Dmitry V. Levin 2013-03-21 18:27:50 MSK
По аналогии со start_daemon, можно добавить --check в stop_daemon и status.
Comment 6 Dmitry V. Levin 2013-03-21 18:29:29 MSK
(In reply to comment #4)
> а интересно, systemd что убивает не по pid-у который поймал при запуске?

systemd завершает все процессы из соответствующей cgroup'ы.
Comment 7 Vladimir Lettiev 2013-09-23 10:49:00 MSK
(В ответ на комментарий №5)
> По аналогии со start_daemon, можно добавить --check в stop_daemon и status.

Давайте добавим