CentOS7.0からsystemdに変わったことで起動スクリプトを今までとは違う記述をしないといけなくなった。サービス制御ファイルを作らないといけない。
PostgreSQLをソースからインストールした最に今まで用意されていたinit.d以下にコピーするスクリプトが使えないので、いろいろ参考にしながら書いたのでメモっとく。
追記(2019/10/1)
久しぶりに見返したらなんか違うと思ったので修正
1./usr/lib/systemd/system/配下にあるファイルを編集してはいけない。
2./etc/systemd/system/配下にファイルを作るないしはコピーして編集する。
3.Unitファイルの変更をsystemdに通知する。
# systemctl daemon-reload
それぞれの項目の説明はしないけどw
自分の環境に合わせて記述してある。
Timeoutの数値とかは適時変更。
# /lib/systemd/system/postgresql.service
[Unit]
Description=PostgreSQL database server
After=network.target
[Service]
Type=forking
User=postgres
Group=postgres
Environment=PGPORT=5432
Environment=PGDATA=/usr/local/pgsql/data
# StandardOutput=syslog
OOMScoreAdjust=-1000
ExecStart=/usr/local/pgsql/bin/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT}" -w -t 300
ExecStop=/usr/local/pgsql/bin/pg_ctl stop -D ${PGDATA} -s -m fast
ExecReload=/usr/local/pgsql/bin/pg_ctl reload -D ${PGDATA} -s
TimeoutSec=300
[Install]
WantedBy=multi-user.target
[Unit]
Description=PostgreSQL database server
After=network.target
[Service]
Type=forking
User=postgres
Group=postgres
Environment=PGPORT=5432
Environment=PGDATA=/usr/local/pgsql/data
# StandardOutput=syslog
OOMScoreAdjust=-1000
ExecStart=/usr/local/pgsql/bin/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT}" -w -t 300
ExecStop=/usr/local/pgsql/bin/pg_ctl stop -D ${PGDATA} -s -m fast
ExecReload=/usr/local/pgsql/bin/pg_ctl reload -D ${PGDATA} -s
TimeoutSec=300
[Install]
WantedBy=multi-user.target
# systemctl enable postgresql
ln -s '/usr/lib/systemd/system/postgresql.service' '/etc/systemd/system/multi-user.target.wants/postgresql.service'# systemctl start postgresql
# systemctl status postgresql
postgresql.service - PostgreSQL database server
Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled)
Active: active (running) since 金 2014-10-31 16:15:28 JST; 6s ago
Process: 7881 ExecStart=/usr/local/pgsql/bin/pg_ctl start -D ${PGDATA} -s -o -p ${PGPORT} -w -t 300 (code=exited, status=0/SUCCESS)
Main PID: 7884 (postgres)
CGroup: /system.slice/postgresql.service
├─7884 /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data -p 5432
├─7886 postgres: checkpointer process
├─7887 postgres: writer process
├─7888 postgres: wal writer process
├─7889 postgres: autovacuum launcher process
└─7890 postgres: stats collector process
PIDFileとか指定してないけど出来てるな・・・
multi-user.targetは、runlevel3相当だそうで。
UnitのAfterはnetworkの後ということで順番だね。
initdよりは楽という感じだね。
Typeはforkingじゃなくて、別なの推奨ってどっかに書いてあったけどどこだかわからなくなったのでそのまま。でも、他のもforkingだしな。
追記
Type=forking はメインプロセスの追跡にPIDファイルが必要になることから、systemdのサービス設定ではType=Forking
よりType=simple
,Type=notify
の利用が推奨される。
参考
Linux - Systemd メモ書き - Qiita
コメント