需求
我的一个机器上面部署了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