我已在Ubuntu 16.04上创建了一项服务,以便在每次引导后运行c ++应用程序。c++应用程序将在其他ping测量中运行,这就是为什么我需要在网络启动后启动它并具有cap_net_raw = ep的原因。我创建并存储在/ etc / systemd / system /下的服务单元文件如下(app.service):
[Unit]
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
Restart=always
ExecStart=/home/app/script.sh
[Install]
WantedBy=default.target
script.sh包含以下内容:
#!/bin/bash
sudo setcap cap_net_raw=ep /home/app/C++_APP
cd /home/app
gnome-terminal -e "./C++_APP"
我还给出了以下命令:
chmod +x /home/app/script.sh
chmod 664 /etc/systemd/system/app.service
systemctl daemon-reload
systemctl enable app.service
但是,当我重新启动操作系统时,c ++应用程序未运行,并且当我给出以下信息时:
systemctl status app.service
我收到以下消息:
app.service Loaded: loaded (/etc/systemd/system/app.service; enabled; vendor preset: enabled) Active: inactive (dead) (Result: exit-code) since Mon 2017-04-03 16:14:21 EEST; 2min 24s ago Process: 2937 ExecStart=/home/user/script.sh (code=exited, status=1/FAILURE)
当我手动运行脚本时,它可以正常运行。有谁知道我做错了什么吗?
systemd
是不适合gnome-terminal
在前台运行桌面应用程序的正确工具。您的systemd
配置将以身份运行该应用程序root
,我想您打算这样做。不会意识到无法在特定用户的前台会话中运行应用程序。
更新您的脚本以使其不使用gnome-terminal
,只需使该应用程序可执行并直接运行即可。
要进行调试,您可以将其记录到STDOUT或STDERR并用于journalctl -u app.service
查看日志。在完整的journalctl
输出中查看附近的行也可能会有所帮助。
另请参阅以下有关通过CLI与systemd一起运行应用程序的相关文章:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句