2011-05-03 6 views
0

필자는 마침내 첫 번째 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는 필요합니다. 다른 서비스 (예 : )가 똑같은 것을 필요로하기 때문에 이것이 문제가되지 않는다고 가정합니다. 다음을 수행하는 makefile이 있습니다.

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

sudo service start-foo start을 실행하면 작동합니다. 그러나 재부팅 할 때 자동 시작되지 않습니다. 내가 뭘 놓치고 있니?

답변

2

스크립트를 다양한 실행 수준의 init 디렉토리에 링크해야합니다. 상자에 chkconfig가 설치되어 있다고 가정하면 chkconfig start-foo on을 사용해보십시오. 그렇지 않으면 스크립트를 다시 가리키는 각 실행 수준의 init 디렉토리에 수동으로 심볼릭 링크를 넣어야합니다.

0

시작하려고하는 순서와 관련이있을 수 있습니다. 스크립트를 실행하기 전에 다른 서비스를 시작해야하는 경우 실행 순서에서 더 아래로 밀어 넣으십시오. chkconfig

# chkconfig foo on 

를 사용하여 필요한 실행 수준에 추가

1

봅니다 당신은

# chkconfig --add foo 

처음