gpt4 book ai didi

linux - 在初始化脚本中启动时如何设置 session DBus 的环境变量?

转载 作者:太空宇宙 更新时间:2023-11-04 10:33:49 26 4
gpt4 key购买 nike

在启动我的应用守护进程之前,我想确保 session 模式下的 DBus 正在运行。/etc/init.d/下的 sh 脚本如下所示:

#!/bin/sh

### BEGIN INIT INFO
# Provides: myAppD
# Required-Start: $local_fs $syslog mountkernfs
# Required-Stop: $local_fs $syslog mountkernfs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starts myApp
### END INIT INFO

# Source function library.
. /etc/init.d/functions

start() {
echo Starting myApp

# start the dbus as session bus and save the enviroment vars
if [ -z ${DBUS_SESSION_BUS_PID+x} ]; then
echo start session dbus ...
eval $(/usr/bin/dbus-launch --sh-syntax)
echo session dbus runs now at pid=${DBUS_SESSION_BUS_PID}
else
echo session dbus runs at pid=${DBUS_SESSION_BUS_PID}
fi

pgrep myApp
if [ "$?" = "0" ]
then
echo myApp already running
exit 0
fi
myApp
echo myApp started successfully
}

stop() {
echo Stopping myApp
kill -SIGHUP `pgrep myApp`
}

status() {
pgrep myApp > /dev/null && echo running
pgrep myApp > /dev/null || echo stopped
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
esac

exit 0

脚本运行良好。但是全局环境变量(DBUS_SESSION_BUS_PID,DBUS_SESSION_BUS_ADDRESS)不是全局设置的。我发现服务有一些 constrains regarding environment variables .

我的脚本是通过 System V 初始化系统执行的。在控制台运行它时,环境变量也没有设置。

有什么办法可以解决这个问题吗?

最佳答案

与其使用 dbus-launch 启动 dbus,然后尝试将您的应用程序连接到它,不如尝试使用 dbus-run-session 运行您的应用程序。(参见 https://dbus.freedesktop.org/doc/dbus-run-session.1.htmlhttps://dbus.freedesktop.org/doc/dbus-launch.1.html)

关于linux - 在初始化脚本中启动时如何设置 session DBus 的环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38505266/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com