我已经在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
,这创建了以下文件:
据我所知,这7个文件中的每一个都是我上面发布的文件的相同副本。根据我一直在阅读的各种教程和论坛,我认为这就足够了。但是,我的服务似乎没有在启动时自动启动。如果我直接拨打sudo /etc/init.d/myprog start
,那么它就可以正常启动了。但是否则它似乎没有启动。
然后我注意到日志中出现了一条错误消息,表示"卷曲错误:无法解析主机,"即使它引用的特定主机肯定是有效的。所以我想也许它试图在libcurl需要的东西准备好之前启动我的应用程序,因此无法启动。再次,如果我手动启动它,它工作正常。我该如何解决这个问题?
答案 0 :(得分:0)
如果DNS解析是故障点,那么请改用IP地址。如果您不愿意使用IP地址,请将主机名和IP地址添加到/ etc / hosts。