systemd 的用户服务和系统服务有什么区别?

systemd 的用户服务和系统服务有什么区别?

我正在尝试通过编写一些服务来更好地理解 systemd。

例如,我很难理解这两种服务之间的区别,好吧,我想确保我正确理解它们会更合适。

例如,我获得了 rtorrent 服务,将其定义为系统服务 rt,我可以使用 sudo systemctl enable 为用户 X、Y、Z 启用该服务[电子邮件保护]

➜  ~  cat /etc/systemd/system/[email protected]
[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

我是这样定义 Dropbox 的:

➜  ~  cat /etc/systemd/user/[email protected]
[Service]
ExecStart=/bin/sh %h/.dropbox-dist/dropboxd
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

如果我理解正确的话,对于许多用户来说,dropbox 服务可以在用户级别启动/停止/启用/禁用,即使该用户不是管理员。这是否意味着我可以作为 userX 为 userY 启用它?至于 rt 服务,只有管理员可以启用/启动/停止它...这是系统服务和用户服务之间的唯一区别吗?

答案1

是的,你有点糊涂了。☺ 你有:

  • 一套系统系统范围实例systemd 的;它们每个都是模板服务单元在文件中。/etc/systemd/system/[email protected]
  • 一套用户每个用户实例systemd 的;它们每个都是一个实例模板服务单元在文件中。/etc/systemd/user/[email protected]

你现在需要理解这一点:

  • systemd 有一个系统范围的实例。它始终运行。它是进程 #1。只有管理员才有权控制系统服务。
  • systemd 有多个针对每个用户的实例。它们在用户登录/注销时按需启动/停止。它们不是进程 #1。每个用户最多有一个,无论用户登录多少次。只有该用户(或管理员)才有权控制自己的服务。

A模板服务单元是一种动态创建多个临时服务单元的方法,这些服务单元的模板参数各不相同。实际实例化的服务单元以模板名称和参数的组合命名。

综合起来,这一切意味着:

  • 在您的 中,[email protected]参数是用户名,用于指定服务以哪个用户身份运行以及运行的工作目录。因此,您可以实例化诸如[email protected]和 之类的服务[email protected]。这些是系统服务,由全系统systemd 的一个实例,需要管理员来启动和停止它们。它正好每个用户都有一个
  • 在您的 中,[email protected]该参数将被忽略。您可以实例化诸如[email protected]和 之类的服务[email protected]。这些是用户服务,由每个用户systemd 的实例。每个用户都有一组自己独立的模板实例,用户可以启动和停止这些模板实例。

您可能不希望您的 Dropbox 服务单元成为模板。或者您现在正在弄清楚该Environment=DISPLAY=%i设置到底是什么。☺

相关内容