Служба, которая использует 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.