当重新启动不同的服务时,如何告诉新贵重新启动服务?

Mar*_*nas 5 upstart 12.04

我的一台服务器上运行着 OpenERP 服务器。它由传统/etc/init.d/脚本启动。它使用 PostgreSQL 数据库,每次重启 PostgreSQL 时都需要手动重启。

每次 Ubuntu 发布 PostgreSQL 的安全更新时,我的 OpenERP 服务器都无法运行,直到我通过 ssh 连接到服务器并手动运行sudo /etc/init.d/my-openerp restart. 我通常在完成sudo apt-get upgrade.

每次 apt 重新启动 postgresql 时,我可以配置 upstart 为我做这件事吗?

Gor*_*vic 4

由于 postgresql 服务器仍在使用已弃用的 System-V 初始化脚本,因此有两个选项:

  • 从现有 System-V 初始化脚本发出事件
  • 将现有 System-V 初始化脚本移植到 upstart 作业

在这两种情况下,您都可以在工作中使用start on started-postgresql和。stop on stopping-postgresql正如评论中提到的, my-openerp将始终在启动/停止postgresql时启动/停止,而不仅仅是在升级后。

如果您选择从现有的 System-V init 脚本发出事件,则需要在 /etc/init.d/postgresql 中添加:

# just before the service is started
initctl emit starting-postgresql
# just after the service is started
initctl emit started-postgresql 
# just before stopping the service
initctl emit stopping-postgresql
# just after the service is stopped
initctl emit stopped-postgresql
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅Ubuntu 启动指南页面上编写服务的有用提示部分。

如果您选择创建 Upstart 作业,最简单的配置可能如下所示:

start on runlevel [2345]
stop on runlevel [016]
respawn

exec su -c "/etc/postgresql/bin/postgres -D /usr/local/pgsql/data" postgres
Run Code Online (Sandbox Code Playgroud)

更详细的 Upstart 配置可以在这里找到。

我会尝试一下,而不是在运行级别 [2345] 上启动 postgresql 也许会说

start on filesystem and net-device-up IFACE!=lo
Run Code Online (Sandbox Code Playgroud)

或者

start on started networking
Run Code Online (Sandbox Code Playgroud)

您还可以考虑添加终止超时节

kill timeout 300
Run Code Online (Sandbox Code Playgroud)