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


10

我仍在与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.

由此看来,似乎不可能在系统启动时调用单位文件中的链接。

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

连结FILENAME

将不在单位文件搜索路径中的单位文件链接到单位文件搜索路径中。这需要单位文件的绝对路径。禁用此功能可以撤消此操作的效果。该命令的作用是,尽管未将文件直接安装在单位搜索路径中,但该文件可用于启动命令和其他命令。

Answers:


13

手册页具有误导性。

systemctl link /root/myservice.service

systemctl enable /root/myservice.service

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

我想...我整天都在努力把头缠住。


1
请注意,systemctl enable这样做也可以systemctl link,因此无需键入2个命令;-)
朱利安(Julien)

@Julien哦,去年我写这本书的时候你在哪里:-)我想我终于在上个月意识到了这一点!
Auspex

10

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

systemctl enable /root/myservice.service

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

systemctl start myservice

这里有一些警告:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.