我有 Debian Jessie 并通过 ssh 连接到它。我想在 systemd 用户登录时自动启动 shell 命令。
我创建了一个简单的 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
Run Code Online (Sandbox Code Playgroud)
我已经通过 systemctl 启用它
systemctl --user enable foo
Run Code Online (Sandbox Code Playgroud)
我已经创建了成功消息容器
touch ~/there
Run Code Online (Sandbox Code Playgroud)
并在重新启动和登录(通过 ssh)后~/there文件为空。
当我手动使用它时
systemctl --user restart foo
Run Code Online (Sandbox Code Playgroud)
有用。
我错过了什么?
默认情况下,用户无法将用户服务设置为在引导时运行。管理员必须为每个用户单独启用此功能。
sudo loginctl enable-linger <username>
Run Code Online (Sandbox Code Playgroud)
从文档:
为一个或多个用户启用/禁用用户延迟。如果为特定用户启用,则会在启动时为用户生成用户管理器,并在注销后保留。这允许未登录的用户运行长时间运行的服务。将一个或多个用户名或数字 UID 作为参数。如果未指定参数,则为调用者会话的用户启用/禁用延迟。
您还需要像 Climenty 在另一个答案中解释的那样为 WantedBy= 设置正确的目标。在不存在用户服务; 默认情况下只有.multi-user.targetdefault.target
[Install]
WantedBy=default.target
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4533 次 |
| 最近记录: |