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
注:上面图示列出了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服务(无需提升权限)或创建其他系统用户来运行该服务的过程相同。
相关主题 |