-1

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

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

S77你好.sh

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

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

谢谢,尤维

4

1 回答 1

1

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

update-rc.d S77Hello.sh defaults

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

但是,在您这样做之前,请修复您的初始化脚本;它缺乏重要的信息。如果你还没有读过这篇文章,你可能会想读。

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

#/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 脚本在您的发行版中的工作方式。

于 2013-02-22T19:43:18.457 回答