我已将 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
我尝试通过以下两种方式在启动时启动服务:
- 为文件从
/usr/lib/systemd/systemd
到创建一个软链接/etc/systemd/system/multi-user.target.wants
(手动和使用systemctl enable
命令)并重新启动系统;testfile
服务在启动时成功启动。 - 在现有正在运行的服务文件中创建依赖项,例如
After=testfile.service
和Wants=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
,这会创建必要的符号链接。