Linux - 非root用户使用systemctl管理服务

文章目录

  • [方式一 (推荐)](#方式一 (推荐))
    • [1. 编辑sudoers文件:](#1. 编辑sudoers文件:)
    • [2. 设置服务文件权限:](#2. 设置服务文件权限:)
    • [3. 启动和停止服务:](#3. 启动和停止服务:)
  • 方式二
    • [1. 查看可用服务:](#1. 查看可用服务:)
    • [2. 选择要配置的服务:](#2. 选择要配置的服务:)
    • [3. 创建自定义服务文件:](#3. 创建自定义服务文件:)
    • [4. 重新加载systemd管理的配置:](#4. 重新加载systemd管理的配置:)
    • [5. 启用并启动服务:](#5. 启用并启动服务:)
    • [6. 检查服务状态:](#6. 检查服务状态:)
  • [普通用户 执行 systemctl start|stop|status 服务名 需要输入root密码](#普通用户 执行 systemctl start|stop|status 服务名 需要输入root密码)

方式一 (推荐)

首先,非root用户通常没有权限直接管理系统服务。但是,可以通过一些方法使非root用户能够启动或停止特定的服务。以下是一般步骤:

1. 编辑sudoers文件:

首先,确保非root用户被允许使用sudo执行特定的服务管理命令。编辑sudoers文件 (/etc/sudoers),使用visudo命令:

bash 复制代码
sudo visudo

在文件中添加一行,允许用户执行特定服务的启动和停止命令。例如,允许用户启动和停止nginx服务:

bash 复制代码
username ALL=(ALL) NOPASSWD: /bin/systemctl start nginx, /bin/systemctl stop nginx

或者

bash 复制代码
username ALL=(ALL) NOPASSWD: ALL

请将username替换为实际的非root用户名。

2. 设置服务文件权限:

确保相关服务文件对非root用户具有执行权限。这通常涉及更改服务文件的权限或将非root用户添加到相应的用户组中。

bash 复制代码
sudo chmod +x /etc/systemd/system/servicename.service

或者,将非root用户添加到服务相关的用户组:

bash 复制代码
sudo usermod -aG groupname username

servicename替换为实际的服务名称,groupname替换为服务相关的用户组。

3. 启动和停止服务:

非root用户现在应该能够使用sudo启动和停止指定的服务。例如:

bash 复制代码
sudo systemctl start servicename
sudo systemctl stop servicename

替换servicename为实际的服务名称。


方式二

1. 查看可用服务:

使用以下命令列出系统上当前可用的服务:

bash 复制代码
systemctl list-unit-files --type=service

2. 选择要配置的服务:

从列表中选择要配置的服务,假设选择的服务为your-service


3. 创建自定义服务文件:

/etc/systemd/system/目录下创建一个自定义的服务文件,例如your-service.service

在文件中添加以下内容,根据实际情况修改ExecStart等字段:

bash 复制代码
[Unit]
Description=Your Service Description
After=network.target

[Service]
Type=simple
ExecStart=/path/to/your-service-executable
User=your-username
Group=your-group

[Install]
WantedBy=multi-user.target

请确保替换/path/to/your-service-executableyour-usernameyour-group为实际的可执行文件路径、非root用户的用户名和用户组。


4. 重新加载systemd管理的配置:

执行以下命令使新的服务文件生效:

bash 复制代码
sudo systemctl daemon-reload

5. 启用并启动服务:

启用服务,使其在系统启动时自动启动:

bash 复制代码
sudo systemctl enable your-service

启动服务:

bash 复制代码
sudo systemctl start your-service

6. 检查服务状态:

确保服务已经正确启动,执行:

bash 复制代码
sudo systemctl status your-service

需要托管到sudo里才可以生效 ,否则需要输入密码 ,如何不输入,可以看下一个


普通用户 执行 systemctl start|stop|status 服务名 需要输入root密码

相关推荐
七夜zippoe11 分钟前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
盟接之桥19 分钟前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
忆~遂愿41 分钟前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
湘-枫叶情缘1 小时前
1990:种下那棵不落叶的树-第6集 圆明园的对话
linux·系统架构
Fcy6482 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满2 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠2 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Gary Studio2 小时前
rk芯片驱动编写
linux·学习
mango_mangojuice2 小时前
Linux学习笔记(make/Makefile)1.23
java·linux·前端·笔记·学习
主机哥哥2 小时前
阿里云OpenClaw部署全攻略,五种方案助你快速部署!
服务器·阿里云·负载均衡