使用libcurl的服务不能在Debian上自动启动?

时间:2017-03-31 22:26:38

标签: linux bash curl debian init.d

我已经在C中编写并编译了一个守护程序,该程序旨在通过root访问在后台运行。我的程序使用libcurl进行一些偶尔的网络调用。我还编写了一个简单的init.d脚本来管理它的启动和关闭过程。我希望这项服务能够在启动时自动启动,并且基于我已经完成的工作,我希望它已经做到了这一点。但是,我注意到与libcurl相关的日志中的错误,因此服务没有自动启动。

我的程序位于/usr/bin/myprog,我在/etc/init.d/myprog中有以下bash脚本:

#!/bin/bash
### BEGIN INIT INFO
# Provides: myprog
# Required-Start: $remote_fs $network $syslog
# Required-Stop: $remote_fs $network $syslog
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description: myprog
# Description: My Daemon Program
### END INIT INFO

. /lib/lsb/init-functions

SCRIPT=/usr/bin/myprog
PIDFILE=/var/run/myprog.pid

start() {
    if [ -f $PIDFILE ]; then
        echo "Service is already started"
        return 2
    else
        $SCRIPT
        $RETVAL="$?"
        return "${RETVAL}"
    fi
}

stop() {
    if [ -f $PIDFILE ]; then
        kill $(cat $PIDFILE)
        rm -f $PIDFILE
        return 0
    else
        echo "Service is not running"
        return 2
    fi
}

case "$1" in
    start)
        log_daemon_msg "Starting myprog" "myprog"
        start
        ;;
    stop)
        log_daemon_msg "Stopping myprog" "myprog"
        stop
        ;;
    status)
        status_of_proce "$SCRIPT" "myprog" && exit 0 || exit $?
        ;;
    restart)
        log_daemon_msg "Restarting myprog" "myprog"
        stop
        start
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart}" >&2
        exit 3
        ;;
esac

然后我运行了sudo update-rc.d myprog defaults,这创建了以下文件:

  • /etc/rc0.d/K01myprog
  • /etc/rc1.d/K01myprog
  • /etc/rc2.d/K01myprog
  • /etc/rc3.d/S02myprog
  • /etc/rc4.d/S02myprog
  • /etc/rc5.d/S02myprog
  • /etc/rc6.d/K01myprog

据我所知,这7个文件中的每一个都是我上面发布的文件的相同副本。根据我一直在阅读的各种教程和论坛,我认为这就足够了。但是,我的服务似乎没有在启动时自动启动。如果我直接拨打sudo /etc/init.d/myprog start,那么它就可以正常启动了。但是否则它似乎没有启动。

然后我注意到日志中出现了一条错误消息,表示"卷曲错误:无法解析主机,"即使它引用的特定主机肯定是有效的。所以我想也许它试图在libcurl需要的东西准备好之前启动我的应用程序,因此无法启动。再次,如果我手动启动它,它工作正常。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果DNS解析是故障点,那么请改用IP地址。如果您不愿意使用IP地址,请将主机名和IP地址添加到/ etc / hosts。