[megfoldva] Postgres nem indul automatikusan

Kedves Hozzáértő kollégák!

Már az összes ötletemet ellőttem a postgres automatikus indításával kapcsolatban, de előrébb nem jutottam.

CentOS release 6.3 (Final) rajta postgresql-8.4.12-1.el6_2.x86_64, postgresql-libs-8.4.12-1.el6_2.x86_64, postgresql-server-8.4.12-1.el6_2.x86_64 csomagokkal.

A gyári stock startup script nem indítja el az adatbázis kezelőt boot folyamat során.
Annyi változás van, hogy megváltoztattuk a DATA dir-t /opt/pgsql/data-ra.

Ezért készítettem egy saját boot scrit-et amit kézzel futtatva simán lefut, de boot-kor az sem...

ötlet?

szerk:
mo.: selinux=0 a kernel boot paraméterek közé és működik a scriptem...
pedig SELINUX-ot nem telepítettem!

Hozzászólások

chkconfig parancs mit mond?
Látszólag ott jól be van állítva?
Ha nem akkor chkconfig szervízneve on

---------------------------------------------------
Hell is empty and all the devils are here.
-- Wm. Shakespeare, "The Tempest"

Persze.
Startup képernyőn írja, hogy Starting Postgres sikerelnül.

start script:


usage()
{
echo "usage: $0 <start|stop|status>"
}
case $1 in
      start)
        echo "Starting PostgreSQL server"
        /usr/bin/pg_ctl start -w -D /opt/pgsql/data -o "-p 5432 -d 0" -l /opt/pgsql/log.log

	;;
      stop)
        /usr/bin/pg_ctl stop -w -D /opt/pgsql/data -m immediate
	;;
      status)
        /usr/bin/pg_ctl status -D /opt/pgsql/data 
      ;;
      *)
      echo "Bruhhaha"
      usage
esac

init script:


# chkconfig: 345 94 06
# description: postgres start/stop
#
# postgress db startup/shutdown script
#
usage()
        {
        echo "Usage: $0 <start|stop|status>"
        }
if [ $# -ne 1 ]
        then
        usage
        exit 1
fi
case $1 in
        start)
        runuser -l postgres -c "/maintenance/postgres_init.sh start"
	touch /var/lock/subsys/Postgres
        ;;
        stop)
        su - postgres -c "/maintenance/postgres_init.sh stop"
        ;;
        status)
        su - postgres -c "/maintenance/postgres_init.sh status"
        ;;
        *)
        usage
        ;;
esac

logfileban semmi még akkor sem ha -d 5 adok neki ...

Ha átadod a tudásod neked attól még nem lesz kevesebb belőle..

Tobb psql fut? Ha csak egy, akkor az miert nem irod at a "gyari" initscriptet:

PGDATA=/var/lib/pgsql/data
PGLOG=/var/lib/pgsql/pgstartup.log

# Override defaults from /etc/sysconfig/pgsql if file is present
[ -f /etc/sysconfig/pgsql/${NAME} ] && . /etc/sysconfig/pgsql/${NAME}

export PGDATA
export PGPORT

Ha tobb fut, akkor meg egy szimpla masolas :)

Selinux nem kavar be? Ha engedve van, akkor ugyanazok a file_context-ek?

Ha kézzel lefut, de bootkor nem, akkor két hiba lehet:

- initkor meg sem kísérlődik lefutni (megfelelő rc?.d ben benne van execute jogokkal?)
- valami van az environmentben, ami a shelledben benne van, de a scriptben amikor init alatt fut, akkor nincs

1. problémára megoldás a scriptbe rakni pl. egy touch /tmp/lefutott parancsot, ha ott van a file, akkor odáig eljutott a script

--
Gábriel Ákos

Tudom hogy nem kozvetlen megoldas a problemadra, DE

Miert kell azert az indito scriptet piszkalni hogy a storage konyvtarat athelyezted ? ahogy fentebb irtak egyreszt meg lehet adni config parameterkent a configban, masreszt akar egy symlinket is rakhatsz a konyvtarra.
( De arra oda kell figyelni nagyon hogy mikor a data konyvtarat mozgatgatod akkor postgre tuti ne menjen...)

Hmmm pedig ez nagyon egyszerűen szokott működni, én jóval primitívebb scriptekkel is simán megoldottam ezt. Valami elemi lépés maradt ki, biztos hogy nem a gyári script indul? Megvolt a chkconfig --del és a chkconfig -add parancs a régi/új scriptre? Scriptbe rakj be egy logger parancsot, hogy lásd, hogy egyáltalán az hívódik-e meg.

set -X az init script elejere es irasd ki vhova, ott latni fogod mi a stajsz.

Az nem lehet, hogy nincs a postgresql szervernek az általad megadott könyvtárhoz joga? Szerintem daemonként illetve manuálisan indítva más lesz a SELinux kontextus. A jelenség alapján kifejezetten a SELinux környékén néznék körül. Mondjuk hülye vagyok hozzá, de ez nem gátol meg abban, hogy ötleteljek. ;)

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Fedorán ilyesmit látok:

ls -dZ /var/lib/pgsql/
drwx------. postgres postgres system_u:object_r:postgresql_db_t:s0 
/var/lib/pgsql/

Az az erős gyanúm, a /opt/pgsql alkönyvtár SELinux címkéit hasonlóképp jó volna rekurzívan átírni. És még az sem kizárt, hogy ez is kevés lesz.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Ha "kezzel" inditva elindul (es logban sem latsz semmi errort/warningot) akkor valami olyan lehet esetleg hogy a boot folyamat alatt a psql indulas olyankor kezdodik amikor meg nem kene, CenTOS init.d verziot nem ismerem, jol be van allitva az rc.d ben a sorrend ?

Nekem olyan volt pl. hogy postgresql confban ugy volt belove par mem/cache merete parameter amihez kellett nehagy kernel opcio, esetleg azt tudom elkepzelni hogy ezeket valami beallitja de csak miutan psql init.d script lefutna.

De szerintem valami sokkal egyszerubb gond lesz, pl. amit feljebb irtak -> postgresql usernek van full joga DATA konyvtarhoz ?

A SELinuxot én annyira nem gyanúsítanám. Ha az akasztja meg a folyamatot, akkor az megakasztaná akkor is, ha kézből indítjuk a postgerst. Azt se feledjük: a SELinux naplóz - tehát ha bármit megakadályoz, akkor annak a logban nyoma van. Már pedig arról volt szó, hogy a logban nincs semmilyen nyom.
Ezen a ponton én is az indító script debugolását követném el, a fentebb is írt set -X beállítással.

Nos, azért írtam meg a szriptet én, mert a gyári hiába írtam át a PGDATA stb változókat nem indul el.
Boot-kor látszik, hogy elindulna a saját indítóm is, mert kiírja, hogy megpróbálja elindítani.

Az environment ellenőrzés jó ötlet, kipróbálom, miként a SeLinux -ot is kikpcsolom boot-kor. (Bár a SeLinux elvileg nincs telepítve, de kitudhassa).

Ha a SELinux ki van kapcsolva, akkor nem szóltam, ugyanakkor a "gyári" init scriptek ilyenek:

system_u:object_r:initrc_exec_t:s0

A sajátra gondolom nem adtál efféle labelt, s ez máris indokolhatja, a saját miért működik. Tegyük hozzá, az érvelésem nyilván csak bekapcsolt SELinux mellett értelmes.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Azert irtam fentebb szukszavuan hogy ~postgres/pgstartup.log mert ebben talalhatoak a postgres elinditasakor keletkezo uzenetek. Erdemes megnezni a tartalmat, no meg az idopontjat is, nehogy egy 'tavalyrol ottmaradt' file-t nezegess. A PGDATA valtozo valoszinuleg a ~postgres/.bash_profile -ban van beallitva, es a 'su-login-kor' jut ervenyre.
centos-t kozelrol meg nem lattam, de rhel-ben igy mukodik.

Már nem azért, de Te nem megoldottad, hanem megkerülted a problémát. Pedig írtam, merre kellene körülnézned.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Teljesen igazad van, de telepítéskor azért nem kértem a SELINUX-ból mert eddig csak problémám volt vele. Valóban nem megoldottam, hanem megkerültem, pontosabban működésre bírtam.
Kicsit bele ásom (majd) magam ebbe a SELINUX történetbe és meglabellelem a megfelelő könyvtárakat.
DE: semmilyen tool nincs fenn hozzá a masinán, így azt is telepíteni kell.
Egyébként meg mit sem ér a SELINUX, ha parancs sorból másként viselkedik mint boot-kor, hiszen így a támadások ellen mit sem ér.

Ha átadod a tudásod neked attól még nem lesz kevesebb belőle..