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をrootに設定する必要があります(他のものの間)。通常のプロセスを実行するための制御プロセスとして機能できる最小限のデーモンがあります。まるでデーモンのように- 例えば悪魔

カスタム信号処理および(診断/監査機能が必要な場合)ロギング機能が必要になる場合があります。

ただし、POSIX拡張機能を使用すると、必要なすべての機能が公開されます。setid() とフォーク()自分のコードから - または単にダウンロードすることができます。あらかじめ作成されたいくつかのPHPコードあなたのためにすべてをしてください。

注:インターネットに誤ったコードや提案を投稿する人がたくさんいます。しかし、彼らは自分に適していると思います。上記のリンクは、より良い実装の1つです。

答え2

私はあなたが読むことを提案しますPHPスクリプトをデーモンプロセスとして実行する

また、元のシステムデーモンのようにPHPデーモンを作成する方法の詳細な説明 -PHPデーモンを書く方法

関連情報