Linux

從 init 執行一個 php 文件

  • November 25, 2018

我正在嘗試從 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

我建議您閱讀Run php script as daemon process

此外,關於像原始系統守護程序一樣編寫 php 守護程序的更詳細描述 -如何編寫 PHP 守護程序

守護程序有很多特性不適用於其他程序。它需要關閉它的標準輸出和標準輸入,它需要與控制程序分離,它需要將它的 cwd 設置為 root(除其他外)。有最少的守護程序可以充當控制程序來執行正常程序,就好像它們是守護程序一樣- 例如daemonize

您可能還需要自定義信號處理和(如果您需要任何診斷/審計功能)日誌記錄功能。

然而,使用 POSIX 擴展,所有必需的函式都暴露出來了——因此您可以在自己的程式碼中設置id() 和 fork(),甚至只需下載一些預先準備好的 php 程式碼來為您完成所有這些工作。

當心:有很多人在網際網路上發布程式碼和建議是錯誤的 - 但他們發現它對他們有用 - 我上面連結的程式碼是更好的實現之一。

引用自:https://unix.stackexchange.com/questions/423991