Bug 2887

Summary: postgresql silently fails to start if pidfile exists
Product: Sisyphus Reporter: Michael Shigorin <mike>
Component: postgresql-serverAssignee: Denis Smirnov <mithraen>
Status: CLOSED FIXED QA Contact:
Severity: blocker    
Priority: P2 CC: ldv, mithraen, ns, rider
Version: unstable   
Hardware: all   
OS: Linux   
Bug Depends on:    
Bug Blocks: 3459    

Description Michael Shigorin 2003-08-27 16:26:03 MSD
trickster:~> sudo service postgresql restart            
Service postmaster is not running. [PASSED]
Adjusting environment for postgresql: [ DONE ]
Starting postmaster service: [ DONE ]
Link postgresql socket: [FAILED]
[...strace session => problem indication skipped...]
[root@trickster root]# rm /etc/init.d/postgresql
[root@trickster root]# service postgresql restart
Service postmaster is not running. [PASSED]
Adjusting environment for postgresql: [ DONE ]
Starting postmaster service: [ DONE ]
Link postgresql socket: [ DONE ]
[root@trickster root]# pidof postmaster
19357 19355 19342

==> we'd better remove pidfile somewhere in stop() ?
ldv: should service scripts check for that?
Comment 1 Dmitry V. Levin 2003-08-28 19:52:26 MSD
stop() already removes stale pidfile: 
 
$ fgrep -n 'rm -f "$PIDFILE"' /etc/init.d/functions 
354:            [ -z "$PIDFILE" ] || rm -f "$PIDFILE" 
Comment 2 Michael Shigorin 2003-08-31 10:53:14 MSD
what's the problem, then? :(

-- 
mike, confused
Comment 3 Michael Shigorin 2004-07-07 21:47:07 MSD
до сих пор актуально :(

проверено при обновлении с 20040505 на 20040706
Comment 4 Michael Shigorin 2004-07-23 22:01:59 MSD
сделать NMU?  это надо фиксить -- сегодня актуально
Comment 5 Michael Shigorin 2004-08-04 18:35:10 MSD
Константин, а можно осведомиться, почему это осталось в новой сборке?

С ней в итоге при обновлении наблюдается та же проблема.

Это _важно_!

(в изначальном сообщении rm /var/lock/subsys/postgresql, конечно же -- как меня
так переклинило)
Comment 6 Michael Shigorin 2004-08-04 18:41:50 MSD
ха... тут еще и postmaster толком не умирал...
Comment 7 Kostya Timoshenko 2004-08-05 07:54:39 MSD
я не могу повторить описанную ошибку, все время стартует нормально
Comment 8 Michael Shigorin 2004-08-05 11:39:00 MSD
Эх.  А я ее практически постоянно ловлю...

Давайте так -- я постараюсь отловить и зафиксить у себя (просто ловилось редко
-- при обновлениях -- и фиксилось *максимально* оперативно кувалдой по месту,
потому что на нем живет dict.linux.org.ua, который мягкий продакшн).  Если
выйдет и у Вас фикс не сломает чего еще -- хорошо бы в пакет.

Простите за нервничанье, просто эта же проблема и с sec updates может вылезти --
прикладываем обновление и сервер не подымается.
Comment 9 Michael Shigorin 2004-08-31 23:16:06 MSD
Вот, обновился.

root@fly ~ # cat /var/lib/pgsql-root/var/lib/pgsql/data/postmaster.pid
12833
/var/lib/pgsql/data
  5432001   9142276
root@fly ~ # ps auxww | grep 12833                                    
postgres 12833  0.0  0.1 16204  740 ?        S    Aug26   0:02
/usr/bin/postmaster -D /var/lib/pgsql/data -S -r /var/lib/pgsql-root
root     28306  0.0  0.1  1592  552 pts/14   S    22:12   0:00 grep 12833
root@fly ~ # file /var/lock/subsys/postgresql
/var/lock/subsys/postgresql: empty
root@fly ~ # service postgresql restart    
Service postmaster is not running.                                      [PASSED]
Adjusting environment for postgresql:                                   [ DONE ]
Starting postmaster service:                                            [ DONE ]
Link postgresql socket:                                                 [FAILED]
root@fly ~ # rm /var/lib/pgsql-root/var/lib/pgsql/data/postmaster.pid
root@fly ~ # service postgresql restart                              
Service postmaster is not running.                                      [PASSED]
Adjusting environment for postgresql:                                   [ DONE ]
Starting postmaster service:                                            [ DONE ]
Link postgresql socket:                                                 [ DONE ]

NB: в изначальном багрепорте что-то не то я из xterm'ов слепил -- прибивать надо
/var/lib/pgsql-root/var/lib/pgsql/data/postmaster.pid, а вовсе не инитскрипт. %)
Comment 10 Denis S. Filimonov 2004-10-06 06:12:09 MSD
а воз и ныне там :(  
после краша не хотел подниматься постгрес из-за pid файла.. 
 
>я не могу повторить описанную ошибку, все время стартует нормально 
есть подозрение, что проявляется это только тогда, когда в системе есть левый 
процесс с pid записанным в этом файле. 
 
$ rpm -q postgresql-server 
postgresql-server-7.4.5-alt1 
 
Comment 11 Sir Raorn 2005-02-17 19:54:27 MSK
А посмотреть на инитскрипты из debian, например, не Б.М.?

У меня точно такая же проблема при апгрейде постгреса.  Плюс совсем не нравится
то, что происходит в stop :-/
Comment 12 Michael Shigorin 2005-03-10 13:11:47 MSK
Date: Sat, 5 Mar 2005 15:30:50 +0300
From: Alex Gorbachenko <agent_007 immo.ru>
To: community altlinux.ru
Subject: Re: [Comm] Re: Postgresql

а всё потому, что правильный stop делается через pg_ctl. тогда и pid
файл удалится, да и самих вариантов останова несколько поболее.
Comment 13 Denis Smirnov 2005-03-10 14:29:15 MSK
бум фиксить
Comment 14 Denis Smirnov 2005-03-10 15:07:11 MSK
7.4.7-alt2 ушло в incoming -- прошу тестировать
Comment 15 algor 2005-03-14 17:22:28 MSK
для pg_ctl stop следует подрисовать "-mi". иначе останова придётся ждать до тех
пор, пока добровольно не отвалятся все клиенты. у меня, например, такого не
бывает никогда, как следствие restat|stop не выполнится.

---/bin/su -s /bin/bash -c "/usr/bin/pg_ctl -D \"$PGDATA\" stop" postgres
+++/bin/su -l postgres -s /bin/sh -c '/usr/bin/pg_ctl stop -D \'$PGDATA\' -mi'

зависимость на /bin/bash в данном случае лишняя, по моему.
Comment 16 Sir Raorn 2005-03-14 17:29:52 MSK
(In reply to comment #15)
> для pg_ctl stop следует подрисовать "-mi". иначе останова придётся ждать до тех
> пор, пока добровольно не отвалятся все клиенты.
-mi нельзя, лучше -mf.

Или как wait_socker - -ms с таймаутом, по истечении которого -mf.
Comment 17 algor 2005-03-14 17:38:20 MSK
согласен.  stop с "-mf" и какой-нибудь forcestop с "-mi".
Comment 18 Denis Smirnov 2005-03-14 18:43:51 MSK
restart как должен делаться?
Comment 19 algor 2005-03-14 19:41:54 MSK
stop()
{
<skip>
/bin/su -l postgres -s /bin/sh -c '/usr/bin/pg_ctl stop -D \'$PGDATA\' -mf
<skip>
}

restart()
{
    stop
    start
}
Comment 20 Denis Smirnov 2005-06-04 20:13:49 MSD
fix ушёл в incoming/
Comment 21 Ivan Fedorov 2005-06-05 10:13:23 MSD
К 8.0 оно тоже надо?..
Comment 22 Denis Smirnov 2005-06-05 13:05:13 MSD
Да.
Comment 23 Michael Shigorin 2005-08-30 02:19:41 MSD
closing
Comment 24 Michael Shigorin 2005-08-30 02:27:49 MSD
closing
Comment 25 Michael Shigorin 2006-04-22 11:32:22 MSD
Представился случай проверить, что работает:

Committing changes...
Preparing packages for installation...
libpq3-7.4.12-alt0.M24.1
postgresql-7.4.12-alt0.M24.1
postgresql-server-7.4.12-alt0.M24.1
Stopping postgresql service: [ DONE ]
rm: cannot remove `/var/lib/pgsql-root/var/lib/pgsql/data/postmaster.pid': No
such file or directory
Adjusting environment for postgresql: [ DONE ]
Starting postmaster service: [ DONE ]
Link postgresql socket: [ DONE ]

И -- работает. :)
Спасибо!
Comment 26 Michael Shigorin 2007-07-07 02:38:52 MSD
Ты будешь смеяться -- опять вылезло на postgresql8.2-server из Server 4.0,
засунутом в VE... локфайл присутствует, сервер не запускается, link socked тоже
failed.
Comment 27 Michael Shigorin 2007-07-07 02:56:10 MSD
хотя... темплейт получился совсем минимальный, без etcnet => сети.
ладно, завтра продолжу.
Comment 28 Michael Shigorin 2007-07-07 03:09:59 MSD
пускаю руками -- бред какой-то:

# /usr/bin/postgres --pidfile /var/lib/pgsql/data/postmaster.pid --background
--make-pidfile -- -D /var/lib/pgsql/data -C /var/lib/pgsql-root 
FATAL:  --pidfile requires a value
Comment 29 Ivan Fedorov 2007-07-07 15:21:12 MSD
Миш, у тебя тут половина параметров какие-то левые... в init-скрипте там куча
парамеров для всех команд разом! :(

А учитывая, что chroot-патч я делал уже из последних сил, то диагностика
обработки параметров вообще почти отсутствует в случае неверных параметров для
chroot. :(
Comment 30 Michael Shigorin 2007-07-07 16:23:34 MSD
(In reply to comment #29)
> Миш, у тебя тут половина параметров какие-то левые... в init-скрипте там куча
> парамеров для всех команд разом! :(
Это было из sh -x /etc/init.d/postgresql restart; попробую на более свежую
голову ещё раз посмотреть.