Linux系统随附的或由第三方应用程序安装的标准Systemd Service单元文件通常以root或系统用户帐户运行,本文将介绍以标准用户身份无需root即可运行Systemd Service登录到系统,将编写一个systemd单位文件(Systemd单元文件包含描述该单元并定义其行为的配置指令),该文件可以由登录用户管理,而无需sudo。
简介
Systemd是SysV风格的现代init和rc替代品,用于Linux系统,它利用了许多现代Linux内核功能。它提供了一个系统和服务管理器,它作为PID 1运行并启动系统的其余部分。Systemd负责控制如何在现代Linux发行版上启动、停止、重新启动和管理服务。
以标准身份运行Systemd Service登录用户
如果想拥有普通用户的完全所有权,则应将用户Systemd服务放置在~/.config/systemd/user/目录中,如果不存在,请创建它:
mkdir -p ~/.config/systemd/user/
我们将创建一个运行Syncthing应用程序的测试服务:
curl -s https://api.github.com/repos/syncthing/syncthing/releases/latest | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4 | wget -qi -
tar xvf syncthing-linux-amd64*.tar.gz
sudo cp syncthing-linux-amd64-*/syncthing /usr/local/bin/
让我们确认我们的应用程序二进制文件可用:
$ syncthing --version
syncthing v1.4.0 "Fermium Flea" (go1.13.8 linux-amd64) teamcity@build.syncthing.net 2020-03-06 19:52:22 UTC
在目录下创建一个系统服务单元文件:
$ vim ~/.config/systemd/user/syncthing.service
[Unit]
Description=Syncthing - Open Source Continuous File Synchronization
Documentation=man:syncthing(1)
[Service]
ExecStart=/usr/local/bin/syncthing -no-browser -no-restart -logflags=0
Restart=on-failure
SuccessExitStatus=3 4
RestartForceExitStatus=3 4
# Hardening
SystemCallArchitectures=native
MemoryDenyWriteExecute=true
NoNewPrivileges=true
[Install]
WantedBy=default.target
重新加载systemd:
$ systemctl --user daemon-reload
确认服务可用:
$ systemctl --user list-unit-files syncthing.service
注:上面图示列出了1个单位文件。
可以在创建后启动服务:
$ systemctl --user enable --now syncthing.service
Created symlink /home/vagrant/.config/systemd/user/default.target.wants/syncthing.service → /home/vagrant/.config/systemd/user/syncthing.service.
让我们检查我们的服务状态:
$ systemctl --user status syncthing.service
使用的选项是:
–user:连接到用户service manager。
这与创建要管理的其他任何Systemd服务(无需提升权限)或创建其他系统用户来运行该服务的过程相同。
相关主题