systemd user service doesn't autorun on user login
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?
Solution 1:
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
Solution 2:
Try this
[Install]
WantedBy=default.target