我在 SLES 12 SP3 系统上有一个 postgresql 数据库,其服务由 systemd 通过标准单元文件管理。我想在失败时自动重启服务,所以创建目录/etc/systemd/system/postgresql.service.d/psql.conf,内容如下。
[Service]
Restart=on-failure
这很好用,我很高兴。现在需要设置一个高可用性系统,其中一个从站处于备用状态,以防主站发生故障。从事 HA 工作的团队已请求在设置集群时禁用重新启动服务标志,因为他们将监视服务并在 postgresql 停止时故障转移到从属服务器。所以我创建了一个文件/etc/systemd/system/potgresqlHA.service,它是现有单元文件的副本,并且 HA 团队开始使用这个文件。
systemctl start/stop/restart/status postgresqlHA
现在有一个脚本可以在请求时备份数据库。此脚本在备份之前检查 postgresql 的状态,以确保服务正在运行。
systemctl status postgresql
这在未设置集群时效果很好。但是在设置集群时,服务的状态会停止,因为 postgresqlHA 是启动的服务。
无论正在运行的数据库服务如何,如何使备份脚本工作?我可以在其中一个单元文件中配置一些东西以使其更易于管理吗?
在其他脚本中检查其他一些服务(apache2、tomcat 等)的状态时,我遇到了同样的问题。
谢谢, 阿布舍克
为什么不
systemctl status postgresql
将备份脚本中的测试改为这样呢?请注意,
systemctl status <service...>
它主要是为交互式使用而设计的;用于脚本,systemctl is-active <service...>
或者systemctl is-failed <service>
可以更方便。如果您列出多个服务,如果至少一个服务满足条件,则命令将返回 0 结果代码。如果您不需要关心运行的是哪个版本的服务,您甚至可以同时测试它们: