3

I have a Fedora 37 server I use for running my 3D printer farm. I have multiple instances of Klipper (3D printer firmware) running as individual systemd units along with other supplementary services as their own unit files.

For example, I have Klipper, Moonraker, and Mainsail (nginx). When I enable the systemd unit for nginx and Moonraker I get no error at all and when I check it shows that the unit is enabled in systemctl status moonraker and systemctl status nginx.

However, when I try to enable Klipper I get this error

[root@fedora ~]# systemctl enable klipper-venus
Failed to enable unit: File klippy: Invalid cross-device link

The part that is strange about this is there is no "cross-device". The server runs on a flat file system built on top of LVM. Klipper's scripts and binaries are living in /opt/klipper which is the same location as moonraker /opt/moonraker. The service will start up just fine if I run systemctl start klipper-venus (the printers are named after planets) the service starts up and the software works. Trying to enable the auto start of the service systemctl enable klipper-venus results in the error from above.

I have checked and re-checked documentation for systemd and have chased my tail with Google and still got nowhere. What would cause this to occur? Since it only affects this single unit file I am to assume it has something to do with the configuration of that unit or something related to klippy.py which is the main file that executes.

Any ideas?

Here is a copy of the unit file for the service that is not working

[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
4
  • 1
    Please round up the systemd service and other unit files for these. The specifics of what systemctl enable does are defined in the [Install] section of that unit so we have no visibility without the unit files.
    – davolfman
    Mar 8, 2023 at 20:52
  • @davolfman I added the unit file to the post. Mar 9, 2023 at 0:34
  • Were you able to fix this issue? I have the same / similar issue
    – mcode
    May 10, 2023 at 19:07
  • @mcode In my case the issue was the alias parameter under the `[install] section. I am not 100% what was wrong but removing that part resolved my issue. May 15, 2023 at 13:12

1 Answer 1

0

Wants=udev.target

You should change the above line, for valid values you probably are interested in see: man systemd.special

Failed to enable unit: File klippy: Invalid cross-device link

This is due to "Alias=klippy" which might be a symbolic link that is already used in the search paths for units... Try to change that to a different name or find the origin of that symlink.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .