我正在使用 CentOS 7。我有一个 nodeJS 服务器,我想将其作为服务运行,但我希望该服务在 PostGres 9.6 服务器启动后启动。我尝试在服务描述(/usr/lib/systemd/system/nodesrv.service)中指定之后...
[Unit]
Description=NodeService nodejs server
[Service]
User=rails
Group=rails
ExecStart=/home/rails/myrailssite_production/NodeService/start.sh
ExecStop=/home/rails/myrailssite_production/NodeService/stop.sh
Type=forking
RemainAfterExit=yes
After=postgresql-9.6.service
[Install]
WantedBy=multi-user.target
但是,我认为 PostGres 仍然需要几秒钟来启动,因为我在上述服务的输出中看到了这一点
[rails@server ~]$ sudo journalctl -u nodesrv
[sudo] password for rails:
-- Logs begin at Mon 2018-06-11 11:08:17 EDT, end at Mon 2018-06-11 11:09:40 EDT. --
Jun 11 11:08:17 server systemd[1]: Starting NodeService nodejs server...
Jun 11 11:08:17 server start.sh[124]: psql: could not connect to server: No such file or directory
Jun 11 11:08:17 server start.sh[124]: Is the server running locally and accepting
Jun 11 11:08:17 server start.sh[124]: connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
有没有办法指定在 PostGres 启动并运行之前不运行脚本?我意识到在某些情况下 PostGres 可能根本无法启动,在这种情况下我可以从不运行该服务。
答案1
您可以在 postgre 服务中使用 ExecStartPost,它可以触发服务的启动,或者您可以在服务中使用 ExecStartPre,它可以在执行 ExecStart 之前检查 postre 服务