启动运行 Debian 的服务时出现问题

启动运行 Debian 的服务时出现问题

我想使用基于 Debian 的发行版 Raspian 在 Raspberry Pi 上将 UPNP 渲染器作为服务运行。实际上,一切都运行良好,但有一件事:我无法在启动时在正确的时间启动服务。对我来说,在 wifi 连接建立之前,它开始得太早了。因此,在网络上看不到渲染器。如果我手动停止该服务并重新启动它,它就可以正常工作。

作为 root,我运行以下命令来创建服务:

update-rc.d gmediarender defaults

但链接的创建方式类似于 S02gmediarender,而 wifi 管理器是 S03wicd,因此在取消注册 gmediarender 后,我尝试了:

update-rc.d gmediarender defaults 99

但结果是一样的。

最初,我的脚本是:

#!/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

我尝试删除标题部分,但没有帮助。感谢您的帮助 :-)

添加 $network 依赖项后,我发出带有(然后不带)-n 选项的 update-rc.d 命令:

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 ~ $ 

这是我的 rc2.d 目录:我想知道网络管理器和 wicd 是否不是多余的并且可能会干扰并造成麻烦?

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 $ 

新的尝试:我尝试重命名/etc/rc2.d/S02gmediarender/etc/rc2.d/S06gmediarender 同样的问题:重新启动后,该服务在网络上不可见。

最后: 我朝另一个方向发展:让问题变得更简单,因为我怀疑 wicd 和网络管理器可能互相干扰。因此,我摆脱了其中的两个并进行了配置,/etc/network/interfaces以便 RPI 只需连接到我的 WiFi 接入点。 KISS 效果:保持简单,愚蠢;-) 没有 wifi 管理器开销,重新启动后,GMediaRenderer 现在可以在我的网络上使用。

答案1

现代 Debian 使用基于依赖的 init 系统。依赖项在 init 脚本顶部的 LSB 标头中定义。您需要定义对以下项的依赖$network

# Required-Start: $remote_fs $syslog $network
# Required-Stop: $remote_fs $syslog $network

相关内容