循序漸進PostgreSQL: 實現PostgreSQL自啟動

來源:互聯網
上載者:User

在手動安裝(針對源碼編譯PG或者是解壓縮版安裝PG的情形)情況下,PG並不是在開機的情況下自動啟動,在關機的情況下自動停止,作為DBA人員來說,顯然這樣的情形是無法接受的。

1. windows下的服務自啟動

在Windows下, 可以使用pg_ctl命令產生PostgreSQL服務,並讓它自啟動。實際上,安裝版本也是這麼做的。  我們不妨看看pg_ctl命令的詳細協助先:

D:\pg921>pg_ctl --helppg_ctl is a utility to initialize, start, stop, or control a PostgreSQL server.Usage:  pg_ctl init[db]               [-D DATADIR] [-s] [-o "OPTIONS"]  pg_ctl start   [-w] [-t SECS] [-D DATADIR] [-s] [-l FILENAME] [-o "OPTIONS"]  pg_ctl stop    [-W] [-t SECS] [-D DATADIR] [-s] [-m SHUTDOWN-MODE]  pg_ctl restart [-w] [-t SECS] [-D DATADIR] [-s] [-m SHUTDOWN-MODE]                 [-o "OPTIONS"]  pg_ctl reload  [-D DATADIR] [-s]  pg_ctl status  [-D DATADIR]  pg_ctl promote [-D DATADIR] [-s]  pg_ctl kill    SIGNALNAME PID  pg_ctl register   [-N SERVICENAME] [-U USERNAME] [-P PASSWORD] [-D DATADIR]                    [-S START-TYPE] [-w] [-t SECS] [-o "OPTIONS"]  pg_ctl unregister [-N SERVICENAME]Common options:  -D, --pgdata=DATADIR   location of the database storage area  -s, --silent           only print errors, no informational messages  -t, --timeout=SECS     seconds to wait when using -w option  -V, --version          output version information, then exit  -w                     wait until operation completes  -W                     do not wait until operation completes  -?, --help             show this help, then exit(The default is to wait for shutdown, but not for start or restart.)If the -D option is omitted, the environment variable PGDATA is used.Options for start or restart:  -c, --core-files       not applicable on this platform  -l, --log=FILENAME     write (or append) server log to FILENAME  -o OPTIONS             command line options to pass to postgres                         (PostgreSQL server executable) or initdb  -p PATH-TO-POSTGRES    normally not necessaryOptions for stop or restart:  -m, --mode=MODE        MODE can be "smart", "fast", or "immediate"Shutdown modes are:  smart       quit after all clients have disconnected  fast        quit directly, with proper shutdown  immediate   quit without complete shutdown; will lead to recovery on restartAllowed signal names for kill:  ABRT HUP INT QUIT TERM USR1 USR2Options for register and unregister:  -N SERVICENAME  service name with which to register PostgreSQL server  -P PASSWORD     password of account to register PostgreSQL server  -U USERNAME     user name of account to register PostgreSQL server  -S START-TYPE   service start type to register PostgreSQL serverStart types are:  auto       start service automatically during system startup (default)  demand     start service on demandReport bugs to <pgsql-bugs@postgresql.org>.

從上邊可以看出,pg_ctl register用於產生服務,而pg_ctl unregister -N <服務名>用於刪除一個服務。

如:

D:\pg921>pg_ctl register -N pg921 -D d:\pg921\data -S auto -w -t 10  -l d:/pg921/log/pg921.log -o "-p 5433"

此命令,即是要產生一個服務:pg921, 啟動方式: -S auto, 自啟動,如果想產生手動啟動,就用-S demand來指定。

-t 10,意指等待10秒鐘, 實際上可以設定的長一些(在生產環境中).

-l d:/pg921/log/pg921.log, 指定產生的記錄檔的位置。

-o "-p 5433", 將服務連接埠號碼改為5433。

驗證一下上述命令產生的效果:

D:\pg921>net start pg921The pg921 service is starting.The pg921 service was started successfully.D:\pg921>psql -p 5433 iiheropsql (9.2.1)Type "help" for help.iihero=# \q

2. Linux下的服務自啟動

在Linux下,我們需要寫一個自啟動的指令碼,至少支援兩個命令選項: start 和 stop,並將這個指令碼建立適當的連結。我們就以Ubuntu10為例,

先看看系統有沒有chkconfig命令工具:

xionghe@seanlinux2:~$ chkconfig
程式“chkconfig”尚未安裝。  您可以使用以下命令安裝:
sudo apt-get install chkconfig
xionghe@seanlinux2:~$ sudo apt-get install chkconfig

指令碼內容如下: 放入目錄/etc/init.d目錄下邊

#! /bin/sh# Installation prefixprefix=/home/xionghe/pgsql# Data directoryPGDATA="/home/xionghe/pgsql/data"# Who to run the postmaster as, usually "postgres".  (NOT "root")PGUSER=xionghe# Where to keep a log filePGLOG="$PGDATA/serverlog"# It's often a good idea to protect the postmaster from being killed by the# OOM killer (which will tend to preferentially kill the postmaster because# of the way it accounts for shared memory).  Setting the OOM_ADJ value to# -17 will disable OOM kill altogether.  If you enable this, you probably want# to compile PostgreSQL with "-DLINUX_OOM_ADJ=0", so that individual backends# can still be killed by the OOM killer.#OOM_ADJ=-17## STOP EDITING HERE# The path that is to be used for the scriptPATH=/home/xionghe/pgsql/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin# What to use to start up the postmaster.  (If you want the script to wait# until the server has started, you could use "pg_ctl start -w" here.# But without -w, pg_ctl adds no value.)DAEMON="$prefix/bin/postmaster"# What to use to shut down the postmasterPGCTL="$prefix/bin/pg_ctl"set -e# Only start if we can find the postmaster.test -x $DAEMON ||{echo "$DAEMON not found"if [ "$1" = "stop" ]then exit 0else exit 5fi}# Parse command line parameters.case $1 in  start)echo -n "Starting PostgreSQL: "test x"$OOM_ADJ" != x && echo "$OOM_ADJ" > /proc/self/oom_adjsu - $PGUSER -c "$DAEMON -D '$PGDATA' &" >>$PGLOG 2>&1echo "ok";;  stop)echo -n "Stopping PostgreSQL: "su - $PGUSER -c "$PGCTL stop -D '$PGDATA' -s -m fast"echo "ok";;  restart)echo -n "Restarting PostgreSQL: "su - $PGUSER -c "$PGCTL stop -D '$PGDATA' -s -m fast -w"test x"$OOM_ADJ" != x && echo "$OOM_ADJ" > /proc/self/oom_adjsu - $PGUSER -c "$DAEMON -D '$PGDATA' &" >>$PGLOG 2>&1echo "ok";;  reload)        echo -n "Reload PostgreSQL: "        su - $PGUSER -c "$PGCTL reload -D '$PGDATA' -s"        echo "ok"        ;;  status)su - $PGUSER -c "$PGCTL status -D '$PGDATA'";;  *)# Print helpecho "Usage: $0 {start|stop|restart|reload|status}" 1>&2exit 1;;esacexit 0

建立相應連結:

root@seanlinux2:/etc# ln -s /etc/init.d/postgresql /etc/rc0.d/K02postgresql
root@seanlinux2:/etc# ln -s /etc/init.d/postgresql /etc/rc1.d/K02postgresql
root@seanlinux2:/etc# ln -s /etc/init.d/postgresql /etc/rc2.d/K02postgresql
root@seanlinux2:/etc# ln -s /etc/init.d/postgresql /etc/rc3.d/K98postgresql
root@seanlinux2:/etc# ln -s /etc/init.d/postgresql /etc/rc4.d/K98postgresql
root@seanlinux2:/etc# ln -s /etc/init.d/postgresql /etc/rc5.d/K98postgresql

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.