You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取通过startx启动的应用程序的退出码

解决Debian信息亭模式下systemd服务捕获myapp退出码的问题

当前你的systemd服务获取的是startx的退出码而非myapp的,核心原因是startx默认返回自身进程的退出码,而非它启动的客户端程序的。以下是两种可行的解决方法:

方法一:修改看门狗脚本传递退出码

  1. 编辑/opt/myapp-watchdog.sh,确保脚本执行myapp后以其退出码终止:
#!/bin/bash
# 执行目标应用并捕获退出码
/opt/myapp
APP_EXIT_CODE=$?

# 可添加额外看门狗逻辑(如日志记录)
# echo "myapp exited with code $APP_EXIT_CODE" >> /var/log/myapp-watchdog.log

# 以myapp的退出码结束脚本
exit $APP_EXIT_CODE
  1. 给脚本添加可执行权限:
chmod +x /opt/myapp-watchdog.sh
  1. 修改systemd服务的ExecStart行,确保su传递脚本的退出码:
ExecStart=su user -c 'startx /opt/myapp-watchdog.sh -- :0 vt7; exit $?'

使用单引号避免shell转义问题,让$?能正确捕获脚本的退出码。

方法二:直接使用xinit替代startx

startx是xinit的封装脚本,可能干扰退出码传递。直接用xinit可更可靠获取客户端程序的退出码:
修改systemd服务的ExecStart为:

ExecStart=su user -c 'xinit /opt/myapp-watchdog.sh -- :0 vt7'

xinit默认返回最后启动的客户端程序的退出码,这样systemd就能直接获取myapp的退出状态,Restart=on-failure会基于myapp的退出码触发重启。

额外注意事项

  • 确保user用户拥有/opt/myapp和/opt/myapp-watchdog.sh的执行权限。
  • 可通过journalctl -u your-service-name.service查看服务日志,验证退出码是否正确传递。
  • 当前服务中XAUTHORITY等环境变量已配置,可保证图形应用的权限正常。

内容的提问来源于stack exchange,提问作者George Tuzikov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 14:06:54