Systemd 依赖项和启动顺序

Systemd 依赖项和启动顺序

我需要指定进程启动的启动顺序。我在 Fedora 18 上运行着 389 Directory Server 和 Samba。我怎样才能先启动网络服务,然后启动 389 DS,再启动 Samba?Fedora 中是否有 GUI 可以管理这些?

我已经启用了 Samba systemctl enable smb.service。我还启用了 389 DS systemctl enable dirsrv.target

答案1

用于systemctl edit smb.service更新依赖项。

After=dirsrv.target- 将确保 smb.service 在 dirsrv.target 之后启动。

为了稳健性(如果您正在修补这些东西,这将是值得的),您可能还希望包括以下一些内容:

Requires=dirsrv.target- 当 smb.service 激活时激活 dirsrv.target。如果 dirsrv.target 失败,将导致 smb.service 失败。

Wants=dirsrv.target- 当 smb.service 激活时激活 dirsrv.target。如果 dirsrv.target 失败,不会导致 smb.service 失败。

BindsTo=dirsrv.target- 如果 dirsrv.target 已停用,则停用 smb.service。

来源:http://www.freedesktop.org/software/systemd/man/systemd.unit.html

systemd-ui为 systemd 提供 GUI。可以很好地查看 systemd 的状态,但您仍需使用文本编辑器来修改单元文件。

答案2

做两件事:

  1. 编辑/lib/systemd/system/smb.service单元文件,指定依赖项。该[unit]部分包含一行After=,指定在此之前应达到哪些服务/目标。

    After=syslog.target network.target nmb.service winbind.service
    

    更改为:

    After=dirsrv.target syslog.target network.target nmb.service winbind.service
    
  2. 将此依赖关系作为错误报告给 Fedora,以便可以将其纳入未来的版本中。

答案3

您可能需要在文件的部分Requires中更改或包含带有指令的一行。[Unit]/usr/lib/systemd/system/smb.service

Requires=dirsrv.target

After=dirsrv.target

答案4

有两种方法可以修改服务文件/usr/lib/systemd/system(请参阅示例 2. 覆盖供应商设置):

  1. 将文件复制到/etc/systemd/system并在副本上执行修改。此文件将完全覆盖 中的文件 /usr/lib

  2. 创建文件/etc/systemd/system/smb.service.d/local.conf。文件内容应类似于以下示例。这会选择性地覆盖供应商提供的服务文件中的“Requires”和“After”选项。

每种方法(包括修改 中的文件/usr/lib)都有优点和缺点。最佳选择可能取决于服务和修改的性质。

虽然它可能有效,但仅添加“After”选项是不够的(请参阅[Unit] 部分选项)。“After”控制顺序,但不控制依赖关系。如果dirsrv.target没有以其他方式启动,则指定顺序将不会启动它。使用“Requires”或“Wants”选项将强制dirsrv.target启动。

[Unit]
Requires=dirsrv.target
After=dirsrv.target

注意:我不知道当最初提出这个问题时是否可以使用这种方法。

相关内容