以 root 以外的用户身份运行 systemd 服务!

以 root 以外的用户身份运行 systemd 服务!

我创建了以下服务 amos.service,它需要作为 amos (amos 组的成员)运行

[Unit]
Description=AMOS Service
After=network.target

[Service]
User=amos
Group=amos
Type=simple
WorkingDirectory=/usr/share/amos
ExecStart=/usr/share/amos/amos_service.sh start
ExecStop=/usr/share/amos/amos_service.sh stop
Restart=on-failure

[Install]
WantedBy=multi-user.target

所有权限均已设置/usr/share/amosamos:amos

amos_service.sh 如下:

#!/bin/bash

CUDIR=$(dirname "$0")
cd /usr/share/amos

start() {
  exec /usr/share/amos/run_amos.sh >> /var/log/amos.log 2>&1  
}

stop() {
  exec pkill java 
}

case $1 in
  start|stop) "$1" ;;
esac

cd "$CURDIR"

当我最初运行该服务时,没有对目录进行任何修改,即属于根目录,并且 amos.service 没有“用户非组”参数,一切都运行得很好!

一旦我将目录权限更改为 amos:amos 并添加 amos.service 用户和组,服务将无法工作,并且我得到以下信息:请参阅附图

尝试运行服务后出错

答案1

使用系统:

要显示问题,请journalctl -xe在启动服务后使用。

您不需要 bash 脚本,请将其放入您的服务文件中:

ExecStart=/usr/share/amos/run_amos.sh

不需要ExecStop,systemd 会停止所有子进程。您可以使用 查看输出journalctl -u amos.service

答案2

我认为你想要分叉而不是简单。 Simple 假设您的进程没有退出,因此当它退出时,它会调用进程死亡。

您可能想要删除 amos_service.sh 脚本并将其功能放入 amos.service 中。

答案3

首先使用以下命令找到要更改的配置:

systemctl list-unit-files

然后使用以下命令更改特定配置:

sudo systemctl edit --full tomcat9.service

这将在环境变量中设置的默认文本编辑器中打开文件EDITOR

现在添加特定用户和组用户服务部分。

答案4

amos也许通过enable-linger选项授权用户启动服务?

loginctl enable-linger amos

(参见男子登录,这似乎是强制性的)

相关内容