我试图通过编写一些服务来更好地理解 systemd。
例如,我很难理解这两种服务之间的差异,我想确保我正确理解它们会更合适。
因此,例如我得到了 rtorrent 服务,定义为 rt 作为系统服务,我可以为用户 X、Y、Z 启用该服务,使用 sudo systemctl enable rt@userX.service
? ~ cat /etc/systemd/system/rt@.service
[Unit]
Description=rTorrent
Requires=network.target local-fs.target
[Service]
Type=forking
KillMode=none
User=%I
ExecStart=/usr/bin/tmux new-session -s rt -n rtorrent -d rtorrent
ExecStop=/usr/bin/tmux send-keys -t rt:rtorrent C-q
WorkingDirectory=/home/%I/
Restart=on-failure
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
我以这种方式定义了保管箱:
? ~ cat /etc/systemd/user/dropbox@.service
[Service]
ExecStart=/bin/sh %h/.dropbox-dist/dropboxd
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
如果我理解得很好,对于许多用户来说,可以在用户级别启动/停止/启用/禁用 Dropbox 服务,即使该用户不是管理员。这是否意味着我可以作为 userX 为 userY 启用它?至于 rt 服务,只有管理员可以启用/启动/停止它......这是系统服务和用户之间的唯一区别吗?
Jde*_*eBP 29
你有点糊涂,是的。☺ 你有:
/etc/systemd/system/rt@.service/etc/systemd/user/dropbox@.service你现在需要明白这一点:
一个模板服务单位正在对飞多个ad-hoc服务单位,在模板参数不同的方式。实际实例化的服务单元被命名为模板名称和参数的组合。
综合起来,这一切都意味着:
rt@.service的参数中是一个用户名,用于指定服务运行的用户及其运行的工作目录。因此您可以实例化服务,例如rt@euri10.service和rt@david.service。这些是系统服务,由systemd的系统范围实例管理,需要管理员来启动和停止它们。这恰好是有每个用户一个。dropbox@.service的参数中被忽略。您可以实例化诸如dropbox@wibble.service和 之类的服务dropbox@phooey.service。这些是用户服务,由systemd的每个用户实例管理。每个用户都有 xyr 自己的一组单独的模板实例,该用户可以启动和停止这些模板实例。您可能不希望 Dropbox 服务单元成为模板。或者您现在正在弄清楚该Environment=DISPLAY=%i设置的全部内容。☺
| 归档时间: |
|
| 查看次数: |
11152 次 |
| 最近记录: |