我可以使用符号链接作为systemd的服务吗?


14

例如,我有一个mysshd.service/usr/lib/systemd/system/目录下命名的服务。我可以创建一个符号链接,例如:

ln -s /usr/lib/systemd/system/mysshd.service /usr/lib/systemd/system/fool.service

这样我对fool.service所做的任何操作都会反映到mysshd.servicesystemctl enable/disable start/stop fool.servce)吗?

我的目的是通过我自己的sshd服务的符号链接覆盖本机sshd服务。


1
为什么不添加并启用服务并禁用本机sshd服务?
兰伯特2015年

我希望我的软件与以前使用符号链接/etc/init.d/ssh-> /etc/init.d/myssh的版本兼容。
尼克

我仍然不完全理解您的意思,但是根据您的行<quote>,这样我对fool.service所做的任何操作都会反映到mysshd.service中(systemctl启用/禁用启动/停止fool.servce)?</ quote >您可能会查看systemd依赖项(请参阅wiki.archlinux.org/index.php/systemd#Handling_dependencies),以在sshd之后启动/启用服务。
兰伯特

@nick欢迎来到Stack Exchange!在Stack Exchange上,习惯上通过赞扬来显示答案的荣誉。您可以通过点击答案左侧的向上箭头来实现。如果我的回答解决了您的问题,则您也可以考虑单击复选框,将其标记为已接受。谢谢!
2015年

Answers:


9

据我所知,systemd不会对此做得特别好。据我了解,您想覆盖的行为sshd.service,对吧?

幸运的是,systemd就是为这种事情而设计的。只需将您的服务定义放入/etc/systemd/system/ssh.service,执行systemctl daemon-reload以重新加载单元文件,systemd将自动使用该配置而不是system ssh.service

也想systemctl enable mysshd.service工作吗?没问题。在[Install]单位文件的部分中,添加一行Alias=mysshd.service。然后执行systemctl reenable ssh.service以systemd修复单元符号链接,您就很高兴了。

现在,您还没有提供mysshd.service应该做什么的详细信息。如果它与正常情况完全不同,那就ssh.service太好了!使用上面的方法。但是,如果您只想更改一件小事情,那么您使用的是错误的方法。systemd允许您创建将在普通单位文件之上应用的单位文件的“片段”。这使您可以添加或覆盖单个指令,同时允许单元文件的其余部分从程序包管理器接收更新。为此,只需创建即可/etc/systemd/system/ssh.d/my-custom-config.conf(您可以更改my-custom-config.conf为所需的内容,也可以有多个覆盖文件)。在该文件中,放置要更改或添加到通常的任何指令ssh.service。您甚至可以添加Alias=指令,这样就systemctl start mysshd.service可以了!只记得执行systemctl daemon-reload完成之后(如果使用Alias=,则systemctl reenable ssh.service)。

顺便说一句,永远不要在中更改systemd单位文件/usr/lib/systemd。曾经!文件系统层次结构标准要求/usr其视为只读。实际上,这意味着包管理器可以处理/usr(除外/usr/local),并且您不会碰到包管理器所处理的内容-尤其是因为所做的任何更改最终都可能会被覆盖。而是将您的东西放到/etc


1
稍微说明一下:如果要覆盖foo.service,请运行sudo systemctl edit foo.service,它将保存您输入的内容/etc/systemd/system/foo.service.d/override.conf
Rockallite

同样,Alias=指令在覆盖文件中也不起作用。参见github.com/systemd/systemd/issues/1090
Rockallite

systemctl edit在我撰写此答案时,@ Rockallite不知道。随时编辑我的答案以反映该Alias=错误(在“ 答复消息中输入OK”或在编辑消息中输入一些内容)。接得好。
奋斗

5

使用link完整路径:

systemctl link /home/nick/myservice.service

请注意,您不能链接本身已经是链接的服务文件。


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.