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

itp*_*guy 29 systemd init services

我创建了以下服务,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
Run Code Online (Sandbox Code Playgroud)

所有权限都已设置/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"
Run Code Online (Sandbox Code Playgroud)

当我最初运行该服务而不对目录进行任何修改时,这意味着属于 root 并且 amos.service 没有 User not Group 参数,一切运行良好!

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

尝试运行服务后出错

ctx*_*ctx 15

使用 systemd:

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

你不需要 bash 脚本,把它放在你的服务文件中:

ExecStart=/usr/share/amos/run_amos.sh
Run Code Online (Sandbox Code Playgroud)

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


小智 7

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

您可能希望删除 amos_service.sh 脚本并将其功能放入 amos.service。