Usando Upstart / init com daemon PHP nohup php daemon.php

1

Até agora eu não tinha necessidade real de aprender bash e init scripts como eu preciso neste momento. Eu criei um aplicativo personalizado do Twitter que está persistente ou constantemente conectado à API. Ele faz tarefas como o download de perfis de seguidores, status, etc. Tarefas Cron não ajudam muito para isso, então eu progredi para usar o esqueleto da classe daemon PHP de desenvolvedores dev140 para a API Phirehose (persitent connection streaming api). Então, eu agora imito um pouco de estado de conexão persistente fazendo com que um daemon faça as coisas que são chamadas singi api no normal (non api streaming) que, de outra forma, são feitas com tarefas agendadas. O daemon apenas lê de uma tabela de que no banco de dados e se não é emty ele sabe o que fazer com ele. São ids e um tipo de trabalho e depois vai buscar o que eu preciso quando eu preciso com o max. Largura de banda que posso obter dentro de uma janela de quadro de 15 min. Muito mais estável assim.

Eu fiz o seguinte script init para iniciar este daemon PHP com php nohup do bash. Ele funciona bem (para mim, pelo menos, por favor, seja o mais legal possível para mim, eu estou me sentindo :) mas eu não consigo fazer o daemon PHP iniciar corretamente quando é uma inicialização real. Quando eu digito sh /etc/init.d/phpdaemons, ele inicia o daemon do php com nohup, isso não é tão legal como esse é o ponto em que você está, não precisando fazer isso manualmente. Então, por favor, alguém? O que eu estou precisando aprender aqui?

Tnx no avançado Daniel

OS spe cs após o código

#!/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

Nenhum módulo LSB está disponível. ID do Distribuidor: Ubuntu Descrição: Ubuntu 14.04.2 LTS Versão: 14.04 Codename: trusty

    
por Daniel Mulder 03.07.2015 / 22:14

1 resposta

0

Para fazer isso funcionar, primeiro precisamos alterar a pasta de trabalho atual do script bash que está envocando o arquivo daemon.php como um seriço do sistema antes de usar o comando nohup php. Para fazer abaixo o trabalho: coloque em (como root) /etc/init.d/yourscript chmod seu + x default do seu update-rc.d yourscript 98 02 adicione linha ao rc2.d: /etc/init.d/yourscript start Alternativa adicionar o nohup php yourscript.php directlty para rc.local, mas isso não é o mesmo que executá-lo como um serviço do sistema como abaixo.

#!/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
    
por Daniel Mulder 06.07.2015 / 20:46