我仍在掌握 systemd 并遇到了一些问题。这不是什么大问题,但我想更多地了解这种情况。我在其他地方找不到任何对此的参考。
首先,我知道服务的自定义单元文件应该放在/etc/systemd/system
. 但是,如果单元文件可以位于其他地方,那么管理我们的服务器会很好。
在文档中,我看到您可以像这样“链接”单元文件:
systemctl link /path/to/servicename.service
Run Code Online (Sandbox Code Playgroud)
这将在/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
Run Code Online (Sandbox Code Playgroud)
使用完全相同的单元文件,但复制到/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.
Run Code Online (Sandbox Code Playgroud)
由此看来,在系统启动时调用单元文件中的链接似乎是不可能的。
如果是这种情况,“链接”功能的意义何在?从文档中,它说:
链接文件名
将不在单元文件搜索路径中的单元文件链接到单元文件搜索路径。这需要单元文件的绝对路径。可以通过禁用来撤消此效果。该命令的作用是一个单元文件可用于启动和其他命令,尽管它没有直接安装在单元搜索路径中。
Aus*_*pex 17
手册页具有误导性。
systemctl link /root/myservice.service
systemctl enable /root/myservice.service
Run Code Online (Sandbox Code Playgroud)
第一个使您可以做到systemctl start myservice
。第二个使myservice
自动启动成为可能(正如@Julien 指出的那样,自动添加了link
)。
我想……我一整天都在想办法解决这个问题。
nic*_*ane 10
从默认路径以外的其他路径启用服务时,您应该使用完整路径。启用还将为您创建链接:
systemctl enable /root/myservice.service
Run Code Online (Sandbox Code Playgroud)
启用后,您可以使用服务名称启动/停止/状态
systemctl start myservice
Run Code Online (Sandbox Code Playgroud)
这里有一些警告: