I like to make sure that the DBus in session mode is running before starting my Application deamon. The sh script under /etc/init.d/ looks like:
#!/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
The script works fine. But the global environment variables(DBUS_SESSION_BUS_PID, DBUS_SESSION_BUS_ADDRESS) are not set globally. I found out that service has some constrains regarding environment variables.
My script is executed via the System V init system. When running it at the console the environment variables are not set as well.
Any ideas how to solve that problem?