SR>>> Т.е. Postgres дожен проверять, не дохлый ли сокет лежит в /tmp? Или
SR>>> ещё круче - автоматом удалять старый при запуске? Не уверен, что это
SR>>> будет хорошо.
VB>> они ПОДРОБHО расписали как это сделать руками. Я сел, и за 5 минут
VB>> реализовал эту их инсрукция в виде патча к скрипту запуска. Ы?
но! там все гораздо веселее. Я скрипт првил давно (с месяц назад), вот
сейчас чтоб тебе ответить полез и прослезился ;)
в /etc/init.d/postgresql
можно наблюдать следующие строки
===
# Check for postmaster already running...
pid=`pidof -s postmaster`
if [ $pid ]
then
echo $"Postmaster already running."
else
#all systems go -- remove any stale lock files
rm -f /tmp/.s.PGSQL.* > /dev/null
echo -n "$PSQL_START"
su -l postgres -s /bin/sh -c "/usr/bin/pg_ctl -D $PGDATA -p /usr/bin/postmaster start > /dev/null 2>&1" < /dev/null
sleep 1
===
но это не помогает.
потом что на
su -l postgres ...
мне говорят
===
pg_ctl: Another postmaster may be running. Trying to start postmaster anyway.
Found a pre-existing shared memory block (ID 32769) still in use.
If you're sure there are no old backends still running,
remove the shared memory block with ipcrm(1), or just
delete "/var/lib/pgsql/data/postmaster.pid".
pg_ctl: cannot start postmaster
Examine the log output.
===
ipcrm shm 32769, как и следовало ожидать говорит "resource(s) deleted", но
после этого всеравно вот тот запуск постмастера не отрабатывает, а выдает
точно такую-же ругню.
Почему нельзя было самим сделать "just delete", мне непонятно.
я добавил после rm -f /tmp/.s.PGSQL
===
kill -0 `head -1 /var/lib/pgsql/data/postmaster.pid` > /dev/null 2>&1
if [ $? != "0" ]
then
rm -f /var/lib/pgsql/data/postmaster.pid
fi
===
опять-же, я совсем не уверен что
1. всегде будет работать head -1
2. всегда kill -0 отработает
и так далее ;)
у меня pgsql не для production service, а потому что он в качесве
backend'а 4SS быстрее чем FlatFile, и легче чем Oracle ;)