Script de inicialização e o verde [OK]

4

Estou tentando instalar o fast-cgi para o nginx em uma instância do EC2. Eu segui os passos explicados aqui , mas isso é para o Debian e não funciona fora da caixa para um sistema baseado no chapéu vermelho. Eu modifiquei o script um pouco para parecer -

#!/bin/bash
### BEGIN INIT INFO
# Provides:          php-fcgi
# Required-Start:    $nginx
# Required-Stop:     $nginx
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts php over fcgi
# Description:       starts php over fcgi
### END INIT INFO

. /etc/rc.d/init.d/functions

(( EUID )) && echo .You need to have root priviliges.. && exit 1
BIND=/tmp/php.socket
USER=nginx
PHP_FCGI_CHILDREN=15
PHP_FCGI_MAX_REQUESTS=1000

PHP_CGI=/usr/bin/php-cgi
PHP_CGI_NAME='basename $PHP_CGI'
PHP_CGI_ARGS="- USER=$USER PATH=/usr/bin PHP_FCGI_CHILDREN=$PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS=$PHP_FCGI_MAX_REQUESTS $PHP_CGI -b $BIND"
RETVAL=0

start() {
      echo -n "Starting PHP FastCGI: "
      #ORIGINAL LINE
      #daemon $PHP_CGI --quiet --start --background --chuid "$USER" --exec /usr/bin/env -- $PHP_CGI_ARGS
      #MODIFIED LINE
      daemon --user=$USER $PHP_CGI -b $BIND&
      RETVAL=$?
      echo
      [ $RETVAL -eq 0 ] && touch /var/lock/subsys/php-fcgi
      #echo "$PHP_CGI_NAME."
}
stop() {
      echo -n "Stopping PHP FastCGI: "
      killall -q -w -u $USER $PHP_CGI
      RETVAL=$?
      echo "$PHP_CGI_NAME."
      rm /var/lock/subsys/php-fcgi
}

case "$1" in
    start)
      start
  ;;
    stop)
      stop
  ;;
    restart)
      stop
      start
  ;;
    *)
      echo "Usage: php-fastcgi {start|stop|restart}"
      exit 1
  ;;
esac
exit $RETVAL

O problema que tenho agora é -

  1. service php-fcgi start mantém o shell bloqueado. Se eu executar service php-fcgi start & e, em seguida, ps aux , vejo o processo php-cgi sendo executado ligado ao soquete. Eu vejo o comando start parar apenas quando executo service php-fcgi stop . Como resolvo esse problema de bloqueio? Eu tentei adicionar um & no final da linha gerando o daemon. Mas outros scripts não parecem estar fazendo isso. Este é o script mais complicado que eu estou tentando modificar ainda: - (
  2. Como obtenho o script para exibir o verde [ OK ] ? Eu verifiquei scripts como o httpd e vi que tudo o que eles estavam fazendo era algo como mostrado abaixo. Mas eu nunca vejo um [ OK ] verde quando executo php-fcgi . Também descobri que colocar echo_success com functions sourced exibe o% verde[ OK ], mas não vejo nenhum outro script na /etc/rc.d/init.d/ execução echo_success ou echo_failure . O que eu tenho errado?
  3. Além disso, como especifico PHP_FCGI_CHILDREN com daemon ?
echo
      [ $RETVAL -eq 0 ] && touch /var/lock/subsys/
    
por Lord Loh. 15.04.2012 / 23:57

2 respostas

3

  1. Altere a linha daemon para:

    daemon --user $USER --pidfile=$PIDFILE "$PHP_CGI -b $BIND &> /dev/null &"
    

    &> /dev/null é equipvalent para >/dev/null 2>&1 , significa que redireciona stdout e stderr para /dev/null .

  2. Se isso não mostrar o sinalizador [ OK ] , tente o seguinte:

    if [ -n "$pid" ]; then
        echo $pid > $PIDFILE
        success "Starting php-cgi service"
    else
        failure "Starting php-cgi service"
    fi
    

    Dê uma olhada na função success no /etc/init.d/functions para mais detalhes.

    A função stop deve mudar para:

    killproc -p $PIDFILE $PHP_CGI_NAME
    
  3. Insira a PHP_CGI_ARGS como variável de ambiente na função daemon :

    daemon --user $USER --pidfile=$PIDFILE "env - $PHP_CGI_ARGS $PHP_CGI -b $BIND &> /dev/null &"

Além disso, para que seja iniciado automaticamente na inicialização, você deve alterar as informações do init para o estilo baseado no Red Hat:

# chkconfig: 345 85 15
# description: Running php-cgi
# processname: php-cgi
# config: /etc/sysconfig/php-cgi
    
por 03.08.2012 / 07:08
2

Então, você está em um sistema baseado em redhat, e você quer uma versão do PHP que vem com o FPM (a melhor maneira de fazer cgi em PHP > = 5.3)? Por que você não instala os pacotes de algum lugar como o IUS: link , em vez de tentar usar uma versão personalizada? O repositório permitirá que você fique atualizado muito mais fácil e, geralmente, facilitará sua vida.

Uma vez que o repositório esteja instalado, isso é tudo que você precisa fazer: chkconfig php-fpm start; service php-fpm start , e tudo estará pronto.

    
por 16.04.2012 / 02:31