我需要指定进程启动的启动顺序。我在 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
做两件事:
编辑
/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
将此依赖关系作为错误报告给 Fedora,以便可以将其纳入未来的版本中。
答案3
您可能需要在文件的部分Requires
中更改或包含带有指令的一行。[Unit]
/usr/lib/systemd/system/smb.service
Requires=dirsrv.target
和
After=dirsrv.target
答案4
有两种方法可以修改服务文件/usr/lib/systemd/system
(请参阅示例 2. 覆盖供应商设置):
将文件复制到
/etc/systemd/system
并在副本上执行修改。此文件将完全覆盖 中的文件/usr/lib
。创建文件
/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
注意:我不知道当最初提出这个问题时是否可以使用这种方法。