为什么我的init.d start-stop-daemon脚本没有在启动时启动应用程序,但我可以手动启动服务?

问题描述:

我想我终于设法正确编写了我的第一个init.d脚本,但是当我去重新启动时,启动没有发生。该脚本start-foo看起来是这样的:为什么我的init.d start-stop-daemon脚本没有在启动时启动应用程序,但我可以手动启动服务?

#! /bin/sh 
# chkconfig 345 85 60 
# description: startup script for foo 
# processname: foo 

NAME=foo 
DIR=/etc/foo/services 
EXEC=foo.py 
PID_FILE=/var/run/foo.pid 
IEXE=/etc/init.d/foo 
RUN_AS=root 

### BEGIN INIT INFO 
# Provides:   foo 
# Required-Start: $remote_fs $syslog 
# Required-Stop:  $remote_fs $syslog 
# Default-Start:  5 
# Default-Stop:  0 1 2 3 6 
# Description:  Starts the foo service 
### END INIT INFO 

if [ ! -f $DIR/$EXEC ] 
then 
     echo "$DIR/$EXEC not found." 
     exit 
fi 

case "$1" in 
    start) 
     echo -n "Starting $NAME" 
    cd $DIR 
    start-stop-daemon -d $DIR --start --background --pidfile $PID_FILE --make-pidfile --exec $EXEC --quiet 
     echo "$NAME are now running." 
     ;; 
    stop) 
    echo -n "Stopping $NAME" 
     kill -TERM `cat $PID_FILE` 
    rm $PID_FILE 
     echo "$NAME." 
     ;; 
    force-reload|restart) 
     $0 stop 
     $0 start 
     ;; 
    *) 
     echo "Use: /etc/init.d/$NAME {start|stop|restart|force-reload}" 
     exit 1 
    ;; 
esac 
exit 0 

foo.py需要sudo的,因为它的开放端口。我认为这不是一个问题,因为其他服务(如)必须需要相同的东西。我有一个生成文件执行以下操作:

make install: 
    chmod +x start-foo 
    cp start-foo /etc/init.d 

如果我运行sudo service start-foo start它的工作原理。但是,当我重新启动时,它不会自动启动。我错过了什么?

您确实已将脚本链接到各种运行级别的init目录中。尝试chkconfig start-foo on以启用该功能,假设您的盒子已安装chkconfig。否则,您需要手动将符号链接放入每个运行级别的init目录中,指向该脚本。

这可能与您尝试启动它的位置顺序有关。如果在脚本运行之前需要启动其他服务,则应该尝试在执行顺序中进一步推送它。

尝试将其添加到所需的运行级别使用chkconfig

# chkconfig foo on 

,你可能需要做

# chkconfig --add foo 

第一

您在不同的/ etc/rc中需要符号链接。 x目录。

update-rc.d start-foo defaults

这将创建符号链接给你的。并删除它们:

update-rc.d start-foo remove

http://manpages.ubuntu.com/manpages/precise/man8/update-rc.d.8.html