使用 Upstart / init 与 PHP 守护进程 nohup php daemon.php

使用 Upstart / init 与 PHP 守护进程 nohup php daemon.php

到目前为止,我还没有真正需要学习 bash 和 init 脚本,因为我现在需要学习。我已经创建了一个自定义 Twitter 应用程序,该应用程序持续或持续连接到 API。它执行下载关注者资料、状态等任务。Cron 作业对此没有太大帮助,因此我继续使用 dev140 开发人员 PHP 守护程序类的骨架来执行 Phirehose API(持久连接流式 API)。所以我现在通过让守护程序执行实际上是普通(非流式 API)上的单个 API 调用的事情来模拟一点持久连接状态,否则将通过 cron 作业完成。守护程序只是从数据库中的队列表中读取,如果它不为空,它就知道如何处理它。它是 ID 和作业类型,然后它会在我需要时使用我在 15 分钟框架窗口内可以获得的最大带宽来获取我需要的内容。这样要稳定得多。

我编写了以下 init 脚本,用于从 bash 使用 php nohup 启动此 PHP 守护程序。它工作正常(至少对我来说,请对我尽可能友善,我有感觉:)但在实际启动时我无法让 PHP 守护程序正常启动。当我输入 sh /etc/init.d/phpdaemons 时,它确实使用 nohup 启动了 php 守护程序,这不是很好,因为这就是关键所在,不需要手动执行。所以,有人可以帮我吗?我需要在这里学习什么?

非常感谢 Daniel

操作系统代码后的 cs

#!/bin/bash
### BEGIN INIT INFO
#
# Provides: phpdaemons
# Required-Start: 2 3 4 5 6
# Required-Stop: 0 1 6
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: PHP nohup daemons initscript
# Description: This file should be placed in /etc / init d
#
### END INIT INFO#

# Fill in name of php daemon file and run as daemon 
PROG="twitter_daemon_spider.php"
PROG_PATH="/home/some/domain/beta.n/lib"
PROG_ARGS=""
PID_PATH="/var/run"

## If not already running start php daemon
start() {
    if [ -e "$PID_PATH/nohup php $PROG.pid" ]; then
        ## Program is running, exit with error.
        echo "Error! $PROG is currently running!" 1>&2
        exit 1
 else
        ## Change from /dev/null to something like /var/log/$PROG if you want to save output.
           nohup php  $PROG_PATH/$PROG $PROG_ARGS 2>&1 >/dev/null &
           echo "nohup php $PROG.pid started"
        touch "$PID_PATH/nohup php $PROG.pid"
    fi
}

## If runinng kill php daemon
stop() {
    if [ -e "$PID_PATH/nohup php $PROG.pid" ]; then
        ## Program is running, so stop it

        killall php $PROG

        rm "$PID_PATH/nohup php $PROG.pid"

                echo "$PROG stopped"

    else
        ## Program is not running, exit with error.
        echo "Error! $PROG not started!" 1>&2
        exit 1
    fi
}

        case "$1" in
    start)
        start
        exit 0
    ;;
    stop)
        stop
 ;;
    reload|restart|force-reload)
        stop
        start
        exit 0
                 ;;
    **)
        echo "Usage: $0 {start|stop|reload}" 1>&2
        exit 1
    ;;
esac

没有可用的 LSB 模块。分销商 ID:Ubuntu 描述:Ubuntu 14.04.2 LTS 发行版:14.04 代号:trusty

答案1

为了使其工作,我们首先需要在使用 nohup php 命令之前更改将 daemon.php 文件作为系统服务调用的 bash 脚本的当前工作文件夹。要使下面的内容工作:放置在(作为 root)/etc/init.d/yourscript chmod yourscript +x update-rc.d yourscript defaults 98 02 中,将行添加到 rc2.d:/etc/init.d/yourscript start 另一种方法是将 nohup php yourscript.php 直接添加到 rc.local,但这与将其作为系统服务运行(如下所示)不同。

#!/bin/bash
### BEGIN INIT INFO
#
# Provides: phpdaemons
# Required-Start: 2 3 4 5
# Required-Stop: 0 1 6

# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: PHP nohup daemons initscript
# Description: This file should be placed in /etc / init d
#
### END INIT INFO#

# Fill in name of php daemon file and run as System32 Daemon /
PROG="daemon.php"
PROG_PATH="/home/some/domain/beta.nl/daemon/lib"
PROG_ARGS=""
PID_PATH="/var/run"

## If not already running start php daemon
start() {
    if [ -e "$PID_PATH/nohup php $PROG.pid" ]; then
        ## Program is running, exit with error.
        echo "Error! $PROG is currently running!" 1>&2
        exit 1
 else
        ## Change from /dev/null to something like /var/log/$PROG if you want to save output.

        cd /home/some/domain/beta.nl/daemon/lib/
        nohup php /home/some/domain/beta.nl/daemon/lib/daemon.php > /dev/null &
        echo "nohup php $PROG.pid started"
        touch "$PID_PATH/nohup php $PROG.pid"
    fi
}

## If runinng kill php daemon
stop() {
    if [ -e "$PID_PATH/nohup php $PROG.pid" ]; then
        ## Program is running, so stop it

        killall php $PROG

        rm "$PID_PATH/nohup php $PROG.pid"

                echo "$PROG stopped"

    else
        ## Program is not running, exit with error.
        echo "Error! $PROG not started!" 1>&2
        exit 1
    fi
}

        case "$1" in
    start)
        start
        exit 0
    ;;
    stop)
        stop
        exit 0
 ;;
    reload|restart|force-reload)
        stop
        start
        exit 0
                 ;;
    **)
        echo "Usage: $0 {start|stop|reload}" 1>&2
        exit 1
    ;;
esac
 stop)
        stop
        exit 0
 ;;
    reload|restart|force-reload)
        stop
        start
        exit 0
                 ;;
    **)
        echo "Usage: $0 {start|stop|reload}" 1>&2
        exit 1
    ;;
esac

相关内容