systemd服务等待nfs挂载后启动

By | 2019年10月13日

需求

我的一个机器上面部署了postgresql,由于/home分区是通过nfs挂载的,导致机器重启后,postgresql都未启动成功,所以猜测是systemd启动postgresql的时候,磁盘还没有挂载上,当然也可以查看日志找到没有成功启动的原因。

所以我们需要修改systemd启动脚本,使它在指定分区“/home”挂载后再启动。

通过Unit节点的RequiresMountsFor来实现

[Unit]
RequiresMountsFor=<path required>
# 比如我们要等/home挂载后启动,则:
# RequiresMountsFor=/home

例如:

[Unit]
Description=PostgreSQL 10 database server
Documentation=https://www.postgresql.org/docs/10/static/
After=syslog.target
After=network.target
RequiresMountsFor=/home #等待/home挂载之后再启动服务

[Service]
Type=notify

User=postgres
Group=postgres


Environment=PGDATA=/home/postgresql/10/data/


OOMScoreAdjust=-1000
Environment=PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj
Environment=PG_OOM_ADJUST_VALUE=0

ExecStartPre=/usr/pgsql-10/bin/postgresql-10-check-db-dir ${PGDATA}
ExecStart=/usr/pgsql-10/bin/postmaster -D ${PGDATA}
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT


TimeoutSec=0

[Install]
WantedBy=multi-user.target

修改完service之后,需要重新加载一下服务

sudo systemctl daemon-reload