系统用户服务不会在用户login时自动运行

我有Debian Jessie并通过ssh连接到它。 我想通过systemd在用户login时自动启动shell命令。

我创build了一个简单的systemd服务~/.config/systemd/user/foo.service巫婆包含:

 [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 

我已经通过systemctl启用它

 systemctl --user enable foo 

我已经创build了成功的消息容器

 touch ~/there 

并在重新启动和login(通过SSH) ~/there文件是空的。

当我手动使用它

 systemctl --user restart foo 

有用。

我错过了什么?

默认情况下,用户无法将用户服务设置为在引导时运行。 pipe理员必须为每个用户启用此function。

 sudo loginctl enable-linger <username> 

从文档 :

启用/禁用一个或多个用户的用户延迟。 如果为特定用户启用,则会在启动时为用户生成用户pipe理器,并在注销后保留该用户pipe理器。 这允许未login的用户运行长时间运行的服务。 将一个或多个用户名或数字UID作为参数。 如果未指定参数,则启用/禁用呼叫者会话的用户延迟。

您还需要为WantedBy =设置正确的目标,就像在另一个答案中解释的Climenty一样。 用户服务不存在multi-user.target 。 默认情况下只有default.target

 [Install] WantedBy=default.target 

尝试这个

 [Install] WantedBy=default.target