在需求开始时启动 systemd 服务

bla*_*imi 6 service systemd

我有一个依赖于 mysql.service 的服务Requires=。这是必要的,因为如果 mysql 不可用,服务就会崩溃。

执行systemctl restart mysql工作正常。它首先停止我的服务,重新启动 mysql 并再次启动我的服务。

如果我运行,我该如何配置我的单元,让它再次启动systemctl stop mysql && systemctl start mysql

这在 debian 无人值守升级 mysql 期间尤其成问题,因为更新过程使用stop/start而不是restart

小智 4


新的更好的答案

显然我昨天没有好好读书。看来您的问题可以通过添加到该部分下的mysql.service服务轻松解决。WantedBy[Install]

mysql.service那么在您重新启用服务后,只要您的服务已启用,它就应该在启动时启动

结果如下:

[Unit]
Requires=mysql.service
After=mysql.service

[Install]
WantedBy=multi-user.target mysql.service
Run Code Online (Sandbox Code Playgroud)

我的旧答案供参考:

我不知道是否可以将您的设备配置为按照您想要的方式运行。

但是,在您的情况下,我通过安装 systemd 插入文件来修改外部单元来解决类似的问题mysql.service

假设您的单位是,foo.service您可以创建一个包含以下内容的.conf文件:
/etc/systemd/system/mysql.service.d/

[Unit]
Wants=foo.service
Before=foo.service
Run Code Online (Sandbox Code Playgroud)

foo.service这将导致 systemd在每次启动后尝试启动mysql.service

为了完整起见,并引用 systemd文档

除了 /etc/systemd/system 之外,系统服务的嵌入式“.conf”文件还可以放置在 /usr/lib/systemd/system 或 /run/systemd/system 目录中。/etc 中的插入文件优先于 /run 中的文件,而 /run 中的文件又优先于 /usr/lib 中的文件。这些目录中任何一个目录下的插入文件都优先于位于任何位置的单元文件。(当然,由于 /run 是临时的,而 /usr/lib 是供供应商使用的,因此不太可能在这些地方使用临时插件。)