首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >systemd:服务缺乏ExecStart=和ExecStop=设置。拒不

systemd:服务缺乏ExecStart=和ExecStop=设置。拒不
EN

Unix & Linux用户
提问于 2017-09-29 10:02:23
回答 1查看 42.4K关注 0票数 4

我正试图通过systemd在Debian发行版上作为守护进程/服务运行我的应用程序。这是我的服务文件:

代码语言:javascript
运行
复制
[Unit]
Description=MyApp Service
After=multi-user.target

[Service]
Type=simple
Restart=always
ExecStart=sudo /usr/bin/java -jar /home/pi/myapp.jar

[Install]
WantedBy=multi-user.target

我把它复制到/lib/systemd/system/myapp.service上。然后我跑:

代码语言:javascript
运行
复制
sudo systemctl enable myapp

然后我检查状态:

代码语言:javascript
运行
复制
sudo systemctl status myapp

我看到了这些错误:

代码语言:javascript
运行
复制
● myapp.service - MyApp Service
   Loaded: error (Reason: Invalid argument)
   Active: inactive (dead)

Sep 29 09:56:24 raspberrypi systemd[1]: [/lib/systemd/system/myapp.service:8] Executable path is not absolute, ignoring: sudo /usr/bin/java -jar /home/pi/myapp.jar
Sep 29 09:56:24 raspberrypi systemd[1]: myapp.service: Service lacks both ExecStart= and ExecStop= setting. Refusing.

当我做which java时,我看到:

代码语言:javascript
运行
复制
pi@raspberrypi:/lib/systemd/system $ which java
/usr/bin/java

所以我不明白为什么systemd会抱怨可执行路径。有什么我能解决的办法吗?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2017-09-29 10:15:34

sudo路径不是绝对的。如果您的systemd单元是系统单元,那么无论如何都不应该需要sudo,因为默认情况下系统单元是以root形式运行的。

编辑:与其以根用户的身份运行JVM和整个Java应用程序,不如以非特权用户的身份运行服务。如果应用程序需要一些通常不授予非特权用户的功能,则可以使用AmbientCapabilities设置添加它。例如,通过向[Service]部分添加以下行:

代码语言:javascript
运行
复制
AmbientCapabilities=CAP_SYS_RAWIO
User=nobody

该服务以用户nobody的身份运行,但被授予CAP_SYS_RAWIO功能。

票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/395131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档