我在单独的分区上有一个 .service,它与“systemctl enable”链接,但不会在启动时自动启动。运行“systemctl status”时显示“加载失败”,如果我运行 ,它就会正常工作systemctl daemon-reload
。
我猜测发生这种情况是因为它位于单独的分区上,并且我可以通过明确执行“cp -t /etc/systemd/system”来解决这个问题。
这看起来像是应该“正常工作”的东西,我遗漏了什么?
答案1
是的,这是预料之中的,并且记录在systemctl(1) 手册页,在enable
命令下:
在启动 systemd 时,链接单元文件所在的文件系统必须可访问(例如,不允许访问其下的任何内容
/home
,/var
除非这些目录位于根文件系统上)。
存在此限制的原因是 systemd 在启动时会扫描所有单元并组装事务。挂载其他文件系统是通过单元完成的,因此在事务进行之前,其他文件系统中的单元将不可用。挂载这些文件系统后,systemd 不会重新扫描单元并重新计算事务。
正如您已经发现的那样,将单元复制到根文件系统是一种合适的解决方法。
答案2
可以采取解决方法。创建将调用以下函数的单元:
systemctl daemon-reload; systemctl start <your service>
使该单位在安装后启动。