systemd服务启动失败:没有service.mount单元

4

我写了一个程序(使用树莓派上的node js),可以手动启动,但无法作为systemd服务启动:

pi@blueberry ~ $ systemd --version
systemd 215
+PAM +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ -SECCOMP -APPARMOR
pi@blueberry ~ $ sudo systemctl daemon-reload
pi@blueberry ~ $ sudo systemctl start /etc/systemd/system/rfxtrx.service
Failed to start etc-systemd-system-rfxtrx.service.mount: Unit etc-systemd-system-rfxtrx.service.mount failed to load: No such file or directory.
pi@blueberry ~ $ 

错误信息提示找不到rfxtrx.service.mount单元。这是正确的。应该有这样的单元吗?最常见的建议是进行守护进程重新加载; 但这并没有起作用。或者根据https://github.com/systemd/systemd/issues/5375,这可能是systemd中的一个错误,但只在比raspbian版本更高的systemd版本中才得到修复(raspbian的版本为215)。
除了尝试升级到不受raspbian维护者支持的版本之外,还有其他解决方案吗?
1个回答

9
首先,您的问题在于您运行了启动服务名称为rfxtrx.service,但是systemd期望的是etc-systemd-system-rfxtrx.service.mount
如果您想要一个systemd挂载配置,则文件名应遵循以下规则:
挂载单元必须以它们控制的挂载点目录命名。例如:挂载点/home/lennart必须在一个unit文件home-lennart.mount中进行配置。
因此,如果您想要在/dir/to/rfxtrx创建挂载点,那么systemd挂载文件的名称需要为dir-to-rfxtrx.mount,并且建议将其放置在/usr/lib/systemd/system//etc/systemd/system/中,后者优先级更高。
如果您只想要一个服务文件,则启用该单元systemctl enable rfxtrx.service。当该单元已经在systemd中注册并需要重新加载时,使用systemctl daemon-reload
您可以使用命令systemctl list-unitssystemctl status rfxtrx.service检查systemd是否存在该服务。
您的错误在于您正在执行sudo systemctl start /etc/systemd/system/rfxtrx.service而不是sudo systemctl start rfxtrx.service

2
谢谢您的回答。您最后一段解决了这个问题。 - Al_
3
你可以考虑强调最后一段,最重要的部分是不能使用完整路径。 - GuidedHacking
最后一行是关键 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接