在 systemd 中启动服务

在 systemd 中启动服务

我已将 systemd 服务文件放置在usr/lib/systemd/system/testfile.service.这是服务文件:

[Unit]
Description=Test service

[Service]
Type=notify

ExecStart=/bin/dd.sh

ExecReload=/bin/kill -HUP $MAINPID

KillMode=process

Restart=on-failure

RestartSec=30s

[Install]

WantedBy=multi-user.target

我尝试通过以下两种方式在启动时启动服务:

  1. 为文件从/usr/lib/systemd/systemd到创建一个软链接/etc/systemd/system/multi-user.target.wants(手动和使用systemctl enable命令)并重新启动系统;testfile服务在启动时成功启动。
  2. 在现有正在运行的服务文件中创建依赖项,例如After=testfile.serviceWants=testfile.service,然后重新启动系统;testfile服务启动成功。

但是,当我在不使用上述方法 1 或 2 的情况下放置文件时/usr/lib/systemd/system,该服务未启动。我觉得放置服务文件/usr/lib/systemd/system/足以让任何服务自动启动,而无需创建到 Wants 目录的软链接或创建与其他服务的依赖关系。

请告诉我,如何在启动时启动/usr/lib/systemd/system目录中存在的服务而不使用上述方法 1 或 2?

我还创建了预设文件来usr/lib/systemd/system-preset/禁用和启用一些服务,但似乎这些预设文件没有执行:我在预设文件中禁用的服务在启动后仍然启用。请让我知道如何调试这个问题。

答案1

当您放置一个单元文件时,/usr/lib/systemd/system您只是将其添加到图书馆系统上可用的单位数。但你还没有告诉系统运行它。

通常你会运行systemctl enable myservice。这将有效地创建您手动创建的符号链接。

正是这个链​​接告诉引导进程在引导时启动哪些单元。

如果您习惯了较旧的形式,init那么您可以将其视为相当于将文件放入/etc/init.d;除非您添加链接,/etc/rc3.d/S##myservice否则它不会在启动时启动。

现在,在某些情况下,其他服务可能依赖于您的服务,这将导致启动,但如果没有任何服务依赖于您的服务,那么您必须拥有由systemctl enable.

答案2

你应该存储您的自定义单位文件位于/etc/systemd/system/.创建它们后,您必须使用 启用它们systemctl enable name,这会创建必要的符号链接。

相关内容