我仍在与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
将不在单位文件搜索路径中的单位文件链接到单位文件搜索路径中。这需要单位文件的绝对路径。禁用此功能可以撤消此操作的效果。该命令的作用是,尽管未将文件直接安装在单位搜索路径中,但该文件可用于启动命令和其他命令。
systemctl enable
这样做也可以systemctl link
,因此无需键入2个命令;-)