在 Systemd 中启用“链接”单元文件

在 Systemd 中启用“链接”单元文件

我仍在掌握 systemd 并遇到了一些问题。这并不是什么大问题,但我想更多地了解这是怎么回事。我在其他地方找不到任何对此的引用。

首先,我知道服务的自定义单元文件应该放在/etc/systemd/system.然而,如果单元文件可以位于其他地方,那么对于服务器的管理来说会很好。

在文档中,我看到您可以像这样“链接”单元文件:

systemctl link /path/to/servicename.service

这将在 中创建指向上述内容的链接/etc/systemd/system。您现在可以启动/停止该服务。从表面上看,这似乎是我们管理服务的好方法。

然而,尝试启用这样的“链接”单元文件会导致失败:

root@test1:/etc/systemd/system# systemctl link /root/myservice.service 
Created symlink from /etc/systemd/system/myservice.service to /root/myservice.service.

root@test1:/etc/systemd/system# systemctl status myservice.service 
 * myservice.service - My Test Service
     Loaded: loaded (/root/myservice.service; linked; vendor preset: enabled)

root@test1:/etc/systemd/system# systemctl enable myservice.service
Failed to execute operation: No such file or directory

使用完全相同的单元文件,但复制到/etc/systemd/system而不是链接到,您将得到:

root@test1:/etc/systemd/system# cp -p /root/myservice.service .

root@test1:/etc/systemd/system# systemctl daemon-reload 

root@test1:/etc/systemd/system# systemctl status myservice.service 
 * myservice.service - My Test Service
     Loaded: loaded (/etc/systemd/system/myservice.service; disabled; vendor preset: enabled)

root@test1:/etc/systemd/system# systemctl enable myservice.service
Created symlink from /etc/systemd/system/multi-user.target.wants/myservice.service to /etc/systemd/system/myservice.service.

由此看来,似乎无法在系统启动时调用链接的单元文件。

如果是这种情况,“链接”功能的意义何在?从文档中,它说:

链接文件名

将不在单元文件搜索路径中的单元文件链接到单元文件搜索路径中。这需要单元文件的绝对路径。可以通过禁用来撤销此效果。该命令的作用是单元文件可用于启动和其他命令,尽管它没有直接安装在单元搜索路径中。

答案1

手册页具有误导性。

systemctl link /root/myservice.service

systemctl enable /root/myservice.service

第一个让你有可能做到systemctl start myservice。第二个使得myservice自动启动成为可能(正如@Julien 指出的那样,它会自动添加link)。

我想...我一整天都在努力思考这个问题。

答案2

从默认路径以外的其他路径启用服务时,应使用完整路径。启用还将为您创建链接:

systemctl enable /root/myservice.service

启用后,您可以使用服务名称启动/停止/状态

systemctl start myservice

这里有一些注意事项:

相关内容