我有一台 Fedora 37 服务器,用于运行我的 3D 打印机场。我有多个 Klipper 实例(3D 打印机固件)作为单独的 systemd 单元运行,其他补充服务作为它们自己的单元文件运行。
例如,我有 Klipper、Moonraker 和 Mainsail (nginx)。当我为 nginx 和 Moonraker 启用 systemd 单元时,我完全没有收到任何错误,当我检查时,它显示该单元已在systemctl status moonraker
和中启用systemctl status nginx
。
但是,当我尝试启用 Klipper 时,出现此错误
[root@fedora ~]# systemctl enable klipper-venus
Failed to enable unit: File klippy: Invalid cross-device link
奇怪的是没有“跨设备”。服务器运行在构建于 LVM 之上的平面文件系统上。 Klipper 的脚本和二进制文件/opt/klipper
与 Moonraker 位于同一位置/opt/moonraker
。如果我运行systemctl start klipper-venus
(打印机以行星命名),服务启动并且软件运行,该服务将启动得很好。尝试启用服务的自动启动systemctl enable klipper-venus
会导致上述错误。
我已经检查了一遍又一遍地检查了 systemd 的文档,并用 Google 追查了我的尾巴,但仍然一无所获。什么会导致这种情况发生?由于它只影响这个单个单元文件,我假设它与该单元的配置或klippy.py
与执行的主文件相关的东西有关。
有任何想法吗?
这是不工作的服务的单元文件的副本
[Unit]
Description=Starts Klipper and provides Unix Domain Socket API
Documentation=https://www.klipper3d.org/
After=network.target
Before=moonraker-venus.service
Wants=udev.target
[Install]
Alias=klippy
WantedBy=multi-user.target
[Service]
EnvironmentFile=/etc/default/klipper-venus
Type=simple
User=root
group=klipper
RemainAfterExit=yes
WorkingDirectory=/opt
ExecStart=/opt/klipper/runtime/bin/python /opt/klipper/klippy.py ${KLIPPER_CONFIG} -l ${KLIPPER_LOG} -I ${KLIPPER_DEV} -a ${KLIPPER_SOCKET}
Restart=always
RestartSec=10
答案1
想要=udev.target
您应该更改上面的行,对于您可能感兴趣的有效值,请参阅:man systemd.special
无法启用单元:文件 klippy:跨设备链接无效
这是由于“Alias=klippy”可能是已在单位搜索路径中使用的符号链接...尝试将其更改为不同的名称或查找该符号链接的来源。