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


18

我创建了以下服务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"

当我最初运行该服务而未对目录进行任何修改(即,属于root)和amos.service没有User not Group参数时,一切运行良好!

将目录权限更改为amos:amos并添加amos.service用户和组后,该服务将不起作用,并且我得到以下信息:请参见附件图像

尝试运行服务后出现错误


就记录到/var/log/amos.log的消息而言,成功案例和失败案例之间有什么区别(如果有)?
sourcejedi

另外,该配置是奇怪的,因为它/var/log是root拥有的。我认为您想使用/var/log/amos/由amos拥有的目录。
sourcejedi

我将按照提及的方式创建并返回结果
-itprguy

Answers:


11

使用systemd:

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

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

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

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


4
在ExecStart之后应该有一个“ =”。我无法解决此问题,因为修改将少于6个字符。
Mark Stosberg '17

5

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

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


将按照建议进行更改...正在阅读并看到您的评论。将记录结果。
itprguy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.