云网牛站
所在位置:首页 > Linux教程 > 在没有root/sudo的情况下运行Systemd Service

在没有root/sudo的情况下运行Systemd Service

2020-04-08 10:41:12作者:但佳稿源:云网牛站

Linux系统随附的或由第三方应用程序安装的标准Systemd Service单元文件通常以root或系统用户帐户运行,本文将介绍以标准用户身份无需root即可运行Systemd Service登录到系统,将编写一个systemd单位文件(Systemd单元文件包含描述该单元并定义其行为的配置指令),该文件可以由登录用户管理,而无需sudo。

 

简介

Systemd是SysV风格的现代init和rc替代品,用于Linux系统,它利用了许多现代Linux内核功能。它提供了一个系统和服务管理器,它作为PID 1运行并启动系统的其余部分。Systemd负责控制如何在现代Linux发行版上启动、停止、重新启动和管理服务。

参考:Systemd入门教程

 

以标准身份运行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

在没有root/sudo的情况下运行Systemd 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

在没有root/sudo的情况下运行Systemd Service

使用的选项是:

–user:连接到用户service manager。

这与创建要管理的其他任何Systemd服务(无需提升权限)或创建其他系统用户来运行该服务的过程相同。

 

相关主题

配置systemd以在Linux崩溃后自动启动服务

精选文章
热门文章