![以 root 以外的用户身份运行 systemd 服务!](https://linux22.com/image/110830/%E4%BB%A5%20root%20%E4%BB%A5%E5%A4%96%E7%9A%84%E7%94%A8%E6%88%B7%E8%BA%AB%E4%BB%BD%E8%BF%90%E8%A1%8C%20systemd%20%E6%9C%8D%E5%8A%A1%EF%BC%81.png)
我创建了以下服务 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/amos
为amos: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
。
现在添加特定用户和组用户服务部分。