Debian – systemd user service doesn’t autorun on user login

debiansystemd

I have Debian Jessie and connect to it by ssh. I want to autostart shell command on user login by systemd.

I've create a simple systemd service ~/.config/systemd/user/foo.service witch contains:

[Unit]
Description=Systemd autostart test
Wants=local-fs.target
After=local-fs.target

[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo 123 >> /home/user/there;"

[Install]
WantedBy=multi-user.target

I've enable it by systemctl

systemctl --user enable foo

I've created success message container

touch ~/there

and after reboot and login (by ssh) ~/there file is empty.

When I use it manually

systemctl --user restart foo

it works.

What am I missing?

Best Answer

By default, users cannot set user services to run at boot time. The admin must enable this on an individual basis for each user.

sudo loginctl enable-linger <username>

From the documentation:

Enable/disable user lingering for one or more users. If enabled for a specific user, a user manager is spawned for the user at boot and kept around after logouts. This allows users who are not logged in to run long-running services. Takes one or more user names or numeric UIDs as argument. If no argument is specified, enables/disables lingering for the user of the session of the caller.

You also need to set the correct target for WantedBy= as Climenty explained in another answer. The multi-user.target does not exist for user services; by default there is only default.target.

[Install]
WantedBy=default.target