无法在Linux启动时启动程序

时间:2013-02-22 18:45:11

标签: linux

我无法在启动设备时正常启动程序。 我创建了一个脚本并将该脚本放在/etc/init.d/S77Hello.sh中 在这个脚本中,我启动了程序,作为其他程序的监视程序。 但是在启动完成后,只有看门狗程序运行的不是应该由看门狗程序启动的其他程序。

有趣的是,当我使用以下命令启动程序时: /etc/init.d/S77Hello.sh start 它以正常方式启动所有其他程序。

S77Hello.sh

#!/bin/sh
/usr/local/bin/mywatchdog

任何有助于解决此问题的帮助都会有所帮助。

谢谢, Yuvi

1 个答案:

答案 0 :(得分:1)

启动时不会自动调用/etc/init.d中的脚本;你必须先告诉你的init系统这样做。如果您的发行版有/etc/init.d,可能是通过update-rc.d完成的。具体做法是:

update-rc.d S77Hello.sh defaults

查看相关的手册页。如果您更喜欢GUI,rcconf提供了一个更加用户友好的界面,但您可能需要先安装它。

然而,在你这样做之前,修复你的init脚本;它缺乏重要信息。如果你还没有,你可能想要阅读this

至少,它需要看起来像这样:

#/bin/sh
### BEGIN INIT INFO
# Provides:          mywatchdog
# Required-Start:    $local_fs
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start watchdog at boot time
# Description:       Something something something
### END INIT INFO

case "$1" in
    start)
        /usr/local/bin/mywatchdog
        echo $! >/var/run/mywatchdog.pid
            echo "watchdog started."
        ;;
    stop)
        if kill "$(cat /var/run/mywatchdog.pid)"; then
            rm /var/run/mywatchdog.pid
            echo "watchdog stopped."
        else
            exit 1
        fi
        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
        ;;
esac

这在某种程度上假定了一个类似Debian的系统,但由于你在ARM上使用带有sysvinit的发行版,我猜你在Raspberry Pi上使用了Raspian。如果没有,请查看现有init脚本在发行版中的工作方式。