我写了一个程序(节点 js,在 Raspberry Pi 上),我可以手动启动,但不能作为 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 ~ $
Run Code Online (Sandbox Code Playgroud)
错误消息抱怨没有 rfxtrx.service.mount 单元。正确的。应该有这样的单位吗?最常见的建议是 daemon-reload;这没有帮助。或者根据https://github.com/systemd/systemd/issues/5375,这可能是 systemd 中的一个错误,该错误已修复,但仅在比 raspbian 中的 systemd 版本更高的 systemd 版本中(raspbian 的版本为 215)。
除了尝试更新到 raspbian 维护者不支持的版本之外,还有其他解决方案吗?
那么这里的第一个问题是您正在运行以启动服务名称,rfxtrx.service但是 systemd 期望etc-systemd-system-rfxtrx.service.mount.
如果您尝试使用 systemd 挂载配置,那么您的文件名应遵循以下规则:
挂载单元必须以其控制的挂载点目录命名。示例:挂载点/home/lennart 必须配置在单元文件home-lennart.mount 中。
因此,如果您想在 say 处创建挂载点,/dir/to/rfxtrx则需要将 systemd 挂载文件命名为dir-to-rfxtrx.mount,并且建议将其放置在后一个目录中/usr/lib/systemd/system/或/etc/systemd/system/优先使用后一个目录。
如果您只想拥有一个服务文件,请启用该单元systemctl enable rfxtrx.service。 systemctl daemon-reload当单元已经注册到 systemd 并且需要重新加载时使用。
您可以使用 systemd 命令systemctl list-units或systemctl status rfxtrx.service.
您遇到的错误是您正在执行sudo systemctl start /etc/systemd/system/rfxtrx.service而不是sudo systemctl start rfxtrx.service.