| #! /bin/sh | |
| # chkconfig: 2345 98 02 | |
| # description: PostgreSQL RDBMS | |
| # This is an example of a start/stop script for SysV-style init, such | |
| # as is used on Linux systems. You should edit some of the variables | |
| # and maybe the 'echo' commands. | |
| # | |
| # Place this file at /etc/init.d/postgresql (or | |
| # /etc/rc.d/init.d/postgresql) and make symlinks to | |
| # /etc/rc.d/rc0.d/K02postgresql | |
| # /etc/rc.d/rc1.d/K02postgresql | |
| # /etc/rc.d/rc2.d/K02postgresql | |
| # /etc/rc.d/rc3.d/S98postgresql | |
| # /etc/rc.d/rc4.d/S98postgresql | |
| # /etc/rc.d/rc5.d/S98postgresql | |
| # Or, if you have chkconfig, simply: | |
| # chkconfig --add postgresql | |
| # | |
| # Proper init scripts on Linux systems normally require setting lock | |
| # and pid files under /var/run as well as reacting to network | |
| # settings, so you should treat this with care. | |
| # Original author: Ryan Kirkpatrick <pgsql@rkirkpat.net> | |
| # contrib/start-scripts/linux | |
| ## EDIT FROM HERE | |
| # Installation prefix | |
| prefix=/usr/local/pgsql | |
| # Data directory | |
| PGDATA="/usr/local/pgsql/data" | |
| # Who to run postgres as, usually "postgres". (NOT "root") | |
| PGUSER=postgres | |
| # Where to keep a log file | |
| PGLOG="$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). To do that, uncomment these | |
| # three lines: | |
| #PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj | |
| #PG_MASTER_OOM_SCORE_ADJ=-1000 | |
| #PG_CHILD_OOM_SCORE_ADJ=0 | |
| # Older Linux kernels may not have /proc/self/oom_score_adj, but instead | |
| # /proc/self/oom_adj, which works similarly except for having a different | |
| # range of scores. For such a system, uncomment these three lines instead: | |
| #PG_OOM_ADJUST_FILE=/proc/self/oom_adj | |
| #PG_MASTER_OOM_SCORE_ADJ=-17 | |
| #PG_CHILD_OOM_SCORE_ADJ=0 | |
| ## STOP EDITING HERE | |
| # The path that is to be used for the script | |
| PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin | |
| # What to use to start up postgres. (If you want the script to wait | |
| # until the server has started, you could use "pg_ctl start" here.) | |
| DAEMON="$prefix/bin/postgres" | |
| # What to use to shut down postgres | |
| PGCTL="$prefix/bin/pg_ctl" | |
| set -e | |
| # Only start if we can find postgres. | |
| test -x $DAEMON || | |
| { | |
| echo "$DAEMON not found" | |
| if [ "$1" = "stop" ] | |
| then exit 0 | |
| else exit 5 | |
| fi | |
| } | |
| # If we want to tell child processes to adjust their OOM scores, set up the | |
| # necessary environment variables. Can't just export them through the "su". | |
| if [ -e "$PG_OOM_ADJUST_FILE" -a -n "$PG_CHILD_OOM_SCORE_ADJ" ] | |
| then | |
| DAEMON_ENV="PG_OOM_ADJUST_FILE=$PG_OOM_ADJUST_FILE PG_OOM_ADJUST_VALUE=$PG_CHILD_OOM_SCORE_ADJ" | |
| fi | |
| # Parse command line parameters. | |
| case $1 in | |
| start) | |
| echo -n "Starting PostgreSQL: " | |
| test -e "$PG_OOM_ADJUST_FILE" && echo "$PG_MASTER_OOM_SCORE_ADJ" > "$PG_OOM_ADJUST_FILE" | |
| su - $PGUSER -c "$DAEMON_ENV $DAEMON -D '$PGDATA' >>$PGLOG 2>&1 &" | |
| echo "ok" | |
| ;; | |
| stop) | |
| echo -n "Stopping PostgreSQL: " | |
| su - $PGUSER -c "$PGCTL stop -D '$PGDATA' -s" | |
| echo "ok" | |
| ;; | |
| restart) | |
| echo -n "Restarting PostgreSQL: " | |
| su - $PGUSER -c "$PGCTL stop -D '$PGDATA' -s" | |
| test -e "$PG_OOM_ADJUST_FILE" && echo "$PG_MASTER_OOM_SCORE_ADJ" > "$PG_OOM_ADJUST_FILE" | |
| su - $PGUSER -c "$DAEMON_ENV $DAEMON -D '$PGDATA' >>$PGLOG 2>&1 &" | |
| echo "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 help | |
| echo "Usage: $0 {start|stop|restart|reload|status}" 1>&2 | |
| exit 1 | |
| ;; | |
| esac | |
| exit 0 |