Problema ao iniciar um serviço com Debian [fechado]

4

Eu quero rodar um renderizador UPNP como um serviço em um Raspberry Pi usando o Raspian, uma distro baseada no Debian. Na verdade, tudo corre bem, mas uma coisa: não consigo iniciar o serviço na hora da inicialização na hora certa. Para mim, parece que começa cedo demais antes que a conexão wifi tenha sido estabelecida. Como resultado, o renderizador não pode ser visto na rede. Se eu parar o serviço manualmente e reiniciá-lo, tudo funcionará bem.

Como root, executo o seguinte comando para criar o serviço:

update-rc.d gmediarender defaults

mas links são criados como S02gmediarender e o gerenciador de wifi é S03wicd então, depois de cancelar o registro do gmediarender, tentei:

update-rc.d gmediarender defaults 99

mas o resultado é o mesmo.

Originalmente, meu roteiro era:

#!/bin/sh

### BEGIN INIT INFO
# Provides: gmediarender
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start GMediaRender at boot time
# Description: Start GMediaRender at boot time.
### END INIT INFO

USER=root
HOME=/root
export USER HOME
case "$1" in
    start)
        echo "Starting GMediaRender"
        start-stop-daemon -x /usr/local/bin/gmediarender -c pi:audio -S -- -f "Raspberry" -d
        ;;
    stop)
        echo "Stopping GMediaRender"
        start-stop-daemon -x /usr/local/bin/gmediarender -K
        ;;
    *)
        echo "Usage: /etc/init.d/gmediarender {start|stop}"
        exit 1
        ;;
esac

exit 0

Eu tentei remover a parte do cabeçalho, mas não ajudou. Obrigado pela vossa ajuda: -)

Após adicionar a dependência $ network, eu emiti o comando update-rc.d com (e depois sem) a opção -n:

pi@raspberrypi ~ $ sudo update-rc.d -n gmediarender defaults 99
update-rc.d: using dependency based boot sequencing
insserv: enable service ../init.d/gmediarender -> /etc/init.d/../rc0.d/K01gmediarender
insserv: enable service ../init.d/gmediarender -> /etc/init.d/../rc1.d/K01gmediarender
insserv: enable service ../init.d/gmediarender -> /etc/init.d/../rc2.d/S02gmediarender
insserv: enable service ../init.d/gmediarender -> /etc/init.d/../rc3.d/S02gmediarender
insserv: enable service ../init.d/gmediarender -> /etc/init.d/../rc4.d/S02gmediarender
insserv: enable service ../init.d/gmediarender -> /etc/init.d/../rc5.d/S02gmediarender
insserv: enable service ../init.d/gmediarender -> /etc/init.d/../rc6.d/K01gmediarender
insserv: dryrun, not creating .depend.boot, .depend.start, and .depend.stop
pi@raspberrypi ~ $ 

Aqui está meu disretor rc2.d: Será que o gerenciador de rede e o wicd não são redundantes e podem interferir e causar problemas?

pi@raspberrypi /etc/rc2.d $ ll
total 4
lrwxrwxrwx 1 root root  17 oct.  28 23:43 K01lightdm -> ../init.d/lightdm
lrwxrwxrwx 1 root root  20 mars  16 19:20 K06nfs-common -> ../init.d/nfs-common
lrwxrwxrwx 1 root root  17 mars  16 19:20 K06rpcbind -> ../init.d/rpcbind
-rw-r--r-- 1 root root 677 févr.  8 01:26 README
lrwxrwxrwx 1 root root  18 oct.  28 22:56 S01bootlogs -> ../init.d/bootlogs
lrwxrwxrwx 1 root root  17 oct.  28 23:27 S01ifplugd -> ../init.d/ifplugd
lrwxrwxrwx 1 root root  14 oct.  28 22:56 S01motd -> ../init.d/motd
lrwxrwxrwx 1 root root  17 oct.  28 23:27 S01rsyslog -> ../init.d/rsyslog
lrwxrwxrwx 1 root root  14 mars  16 17:50 S01sudo -> ../init.d/sudo
lrwxrwxrwx 1 root root  22 oct.  28 23:27 S01triggerhappy -> ../init.d/triggerhappy
lrwxrwxrwx 1 root root  14 oct.  28 23:27 S02cron -> ../init.d/cron
lrwxrwxrwx 1 root root  14 oct.  28 23:27 S02dbus -> ../init.d/dbus
lrwxrwxrwx 1 root root  24 oct.  28 23:28 S02dphys-swapfile -> ../init.d/dphys-swapfile
lrwxrwxrwx 1 root root  22 mars  30 21:38 S02gmediarender -> ../init.d/gmediarender
lrwxrwxrwx 1 root root  13 oct.  28 23:27 S02ntp -> ../init.d/ntp
lrwxrwxrwx 1 root root  15 mars  16 18:00 S02rsync -> ../init.d/rsync
lrwxrwxrwx 1 root root  13 oct.  28 23:59 S02ssh -> ../init.d/ssh
lrwxrwxrwx 1 root root  22 mars  16 21:25 S03avahi-daemon -> ../init.d/avahi-daemon
lrwxrwxrwx 1 root root  19 mars  16 18:47 S03bluetooth -> ../init.d/bluetooth
lrwxrwxrwx 1 root root  25 mars  16 18:48 S03network-manager -> ../init.d/network-manager
lrwxrwxrwx 1 root root  14 mars  23 15:09 S03wicd -> ../init.d/wicd
lrwxrwxrwx 1 root root  20 mars  16 19:20 S04pulseaudio -> ../init.d/pulseaudio
lrwxrwxrwx 1 root root  18 mars  16 19:20 S05rc.local -> ../init.d/rc.local
lrwxrwxrwx 1 root root  19 mars  16 19:20 S05rmnologin -> ../init.d/rmnologin
pi@raspberrypi /etc/rc2.d $ 

Uma nova tentativa: Eu tentei renomear /etc/rc2.d/S02gmediarender as /etc/rc2.d/S06gmediarender Mesmo problema: após a reinicialização, o serviço não é visível na rede.

Finalmente: Fui em outra direção: simplificar o problema, pois suspeitava que wicd e network-manager provavelmente estavam interferindo um no outro. Então eu me livrei dos dois e configurei /etc/network/interfaces para que o RPI simplesmente se conectasse ao meu ponto de acesso wifi. O efeito KISS: Mantenha-o simples, estúpido ;-) Sem a sobrecarga dos gerenciadores de Wi-Fi e após a reinicialização, o GMediaRenderer agora está disponível na minha rede.

    
por Sun Wukong 30.03.2013 / 17:56

1 resposta

3

O Debian moderno usa um sistema init baseado em dependência. As dependências são definidas no cabeçalho do LSB que você tem na parte superior do script de inicialização. Você precisa definir uma dependência em $network :

# Required-Start: $remote_fs $syslog $network
# Required-Stop: $remote_fs $syslog $network
    
por 30.03.2013 / 19:13