Служба, которая использует libcurl, не запускается автоматически в Debian?

Я написал и скомпилировал программу-демон на C, которая должна работать в фоновом режиме с правами root. Моя программа использует libcurl для периодических сетевых звонков. Я также написал простой скрипт init.d для управления процедурами запуска и завершения работы. Я хотел бы, чтобы этот сервис автоматически запускался при загрузке, и, исходя из того, что я сделал, я ожидал, что он уже будет делать это. Тем не менее, я заметил ошибку в журналах, связанных с libcurl, и в результате служба не запускается автоматически.

Моя программа находится в /usr/bin/myprog и у меня есть следующий скрипт bash, расположенный в /etc/init.d/myprog:

#!/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 ответ

Если разрешение DNS является точкой сбоя, используйте вместо этого IP-адрес. Если вы не хотите использовать IP-адрес, добавьте имя хоста и IP-адрес в /etc/hosts.

Другие вопросы по тегам