How to Enable User-Level Systemd Services to Start Automatically on Ubuntu After Reboot
TL;DR
If your user-level systemd service on Ubuntu doesn't start automatically after a reboot, enable it with systemctl --user enable HappyNotes.Api.service
. If you encounter an error about an existing symlink, remove it first. To allow the service to run without an active user session, enable lingering using loginctl enable-linger <username>
. Finally, ensure your service file has the correct [Install]
section and reboot to check if the service starts as expected.
The Problem
After configuring a user-level service with systemd, you might find that it remains inactive after rebooting your server. For example, you may run the command:
systemctl --user status HappyNotes.Api.service
And see output indicating that the service is inactive (dead) and disabled.
Solution Steps
-
Enable the Service: First, ensure your service is enabled to start at boot:
systemctl --user enable HappyNotes.Api.service
If you encounter an error stating that the service is already linked, you may need to remove the existing symlink:
rm ~/.config/systemd/user/default.target.wants/HappyNotes.Api.service
-
Check for Linger: User-level services require an active user session to run. To allow your user services to run even when you're not logged in, enable lingering:
loginctl enable-linger $USER
-
Verify Service Configuration: Ensure your service file has the correct
[Install]
section:[Install] WantedBy=default.target
-
Reboot and Test: After enabling lingering and ensuring your service is set up correctly, reboot your server:
sudo reboot
After rebooting, check the status of your service again:
systemctl --user status HappyNotes.Api.service
By following these steps, you can ensure that your user-level systemd services start automatically after a reboot on Ubuntu. Enabling lingering
is the key, which is particularly useful for server environments where continuous operation of services is desired.