init에서 PHP 파일 실행

init에서 PHP 파일 실행

Centos 6.9의 init.d에서 PHP 스크립트를 실행하려고 하는데 서비스를 시작한 터미널을 종료하면 애플리케이션이 중지되고 애플리케이션이 실행 중임에도 불구하고 애플리케이션 상태가 항상 중지된 것으로 표시됩니다.

    #!/bin/sh
    #
    # arrbot        This shell script takes care of starting and stopping
    #               the arbbot
    #
    # chkconfig: - 65 20
    # description:  arbbot trader.
    # processname: arbbot
    # Required-Start: $network $syslog $mysqld
    # Required-Stop:  $network $syslog $mysqld
    # Short-Description: start and stop arbbot server
    # Description: arbbot trader
    ### END INIT INFO

    # Source function library.
    . /etc/rc.d/init.d/functions

    NAME=arbbot
    DESC="arbbot trader"
    LOGFILE="/var/log/${NAME}.log"
    DAEMON="/usr/bin/php5"
    WORK_DIRECTORY="/var/www/arbbot/"
    DAEMON_OPTS="/var/www/arbbot/main.php"
    ARBDIR="/var/www/arbbot"
    ARBBOT="exec ${DAEMON} ${DAEMON_OPTS} > ${LOGFILE} 2>&1 > NULL"
    LOCK="/var/lock/subsys/arbbot"

    start() {
            echo -n "Starting ${DESC}: "
            cd "${WORK_DIRECTORY}"
            $ARBBOT
            RETVAL=$?
            [ $RETVAL -eq 0 ] && touch -- "$LOCK"
            return $RETVAL
    }

    stop() {
            echo -n "Shutting down arbbot: "
            killproc $ARBBOT
            rm -f $LOCK
            return
    }

    restart() {
            stop
            start
    }

    reload() {
            restart
    }

    case "$1" in
    start)
            start
            echo "$NAME."
            ;;
    stop)
            stop
            echo "$NAME."
            ;;
    status)
            status ARBBOT
            RETVAL=$?
            ;;
    restart)
            restart
            ;;
    reload)
            reload
            ;;
    *)
            echo "Usage:  {start|stop|status|reload|restart[|probe]"
            exit 1
            ;;
    esac

    exit $RETVAL

답변1

데몬 프로세스에는 다른 프로세스에서 사용할 수 없는 많은 기능이 있습니다. stdout 및 stdin을 닫아야 하고 제어 프로세스에서 분리해야 하며 cwd를 루트로 설정해야 합니다(다른 것들 사이). 일반 프로세스 실행을 위한 제어 프로세스 역할을 할 수 있는 최소한의 데몬이 있습니다.마치 데몬인 것처럼- 예를 들어악마

사용자 정의 신호 처리 및 (진단/감사 기능이 필요한 경우) 로깅 기능이 필요할 수도 있습니다.

그러나 POSIX 확장을 사용하면 필요한 모든 기능이 노출됩니다.setid() 및 포크()자신의 코드에서 - 또는 그냥 다운로드해도 됩니다.미리 작성된 일부 PHP 코드당신을 위해 모든 일을 하세요.

참고: 인터넷에 잘못된 코드와 제안을 게시하는 사람들이 많이 있습니다. 하지만 그들은 자신에게 적합하다고 생각합니다. 위에 링크한 코드는 더 나은 구현 중 하나입니다.

답변2

나는 당신이 읽을 것을 제안합니다PHP 스크립트를 데몬 프로세스로 실행 .

또한 원래 시스템 데몬처럼 PHP 데몬을 작성하는 방법에 대한 자세한 설명 -PHP 데몬을 작성하는 방법.

관련 정보