Estou trabalhando em um servidor Debian Linux (AWS EC2) e tenho um software que precisa ser executado em um ambiente gráfico.
Se eu iniciá-lo manualmente (digitando ./program.sh
em seu diretório) está funcionando bem: eu posso mudar para uma janela vncviewer (é um servidor em nuvem que eu estou controlando remotamente) eu posso ver o programa de partida.
o valor $DISPLAY
é definido no momento da inicialização para :1.0
No entanto, se eu tentar que meu program.sh
seja executado no momento da inicialização, criando um script init.d
, não vejo nada acontecendo no ambiente gráfico.
Eu tentei ler o log do meu programa, mas não consegui encontrar nada conclusivo.
Acho que há um problema com a variável DISPLAY
ou com a permissão xhosts, mas como o software que estou executando é um pouco intricado (com credenciais de login, etc), é difícil para mim encontrar o problema
É por isso que eu gostaria de recorrer à criação de um script simples " hello_world.sh
" que apenas abriria uma janela simples no env gráfico, para testar o que acontece quando iniciar manualmente e com o boot start.
Alguém pode me dar esse roteiro? Sua funcionalidade deve ser basicamente: digite ./hello_world.sh
em um shell - > veja uma janela se abrindo no ambiente gráfico. O objetivo seria testar como esse script simples se comportaria se eu criasse um script de inicialização init.d para ele.
Como um entrevistado solicitou os detalhes do meu arquivo init.d não funcional atual, aqui está:
#!/bin/sh
### BEGIN INIT INFO
# Provides: IBController
# Required-Start: $remote_fs $syslog +vncserver
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
dir="/opt/IBController"
cmd="./IBControllerGatewayStart.sh"
user="depot"
name='basename $0'
pid_file="/var/run/$name.pid"
stdout_log="/var/log/$name.log"
stderr_log="/var/log/$name.err"
get_pid() {
cat "$pid_file"
}
is_running() {
[ -f "$pid_file" ] && ps -p 'get_pid' > /dev/null 2>&1
}
case "$1" in
start)
if is_running; then
echo "Already started"
else
echo "Starting $name"
xhost local:depot
export DISPLAY=:2.0
cd "$dir"
if [ -z "$user" ]; then
sudo $cmd >> "$stdout_log" 2>> "$stderr_log" &
else
sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" &
fi
echo $! > "$pid_file"
if ! is_running; then
echo "Unable to start, see $stdout_log and $stderr_log"
exit 1
fi
fi
;;
stop)
if is_running; then
echo -n "Stopping $name.."
kill 'get_pid'
for i in 1 2 3 4 5 6 7 8 9 10
# for i in 'seq 10'
do
if ! is_running; then
break
fi
echo -n "."
sleep 1
done
echo
if is_running; then
echo "Not stopped; may still be shutting down or shutdown may have failed"
exit 1
else
echo "Stopped"
if [ -f "$pid_file" ]; then
rm "$pid_file"
fi
fi
else
echo "Not running"
fi
;;
restart)
$0 stop
if is_running; then
echo "Unable to stop, will not attempt to start"
exit 1
fi
$0 start
;;
status)
if is_running; then
echo "Running"
else
echo "Stopped"
exit 1
fi
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
exit 0