4 votes

Init script & le vert [ OK ]

J'essaie d'installer fast-cgi pour nginx sur une instance EC2. J'ai suivi les étapes expliquées aquí mais il est destiné à Debian et ne fonctionne pas directement sur un système basé sur Red Hat. J'ai modifié un peu le script pour qu'il ressemble à -

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

Le problème que j'ai maintenant est -

  1. service php-fcgi start garde le Shell bloqué. Si je lance service php-fcgi start & et ensuite ps aux Je vois le processus php-cgi en cours d'exécution lié au socket. Je vois la commande de démarrage s'arrêter uniquement lorsque j'exécute service php-fcgi stop . Comment puis-je résoudre ce problème de blocage ? J'ai essayé d'ajouter un & à la fin de la ligne qui lance le démon. Mais les autres scripts ne semblent pas faire cela. C'est le scripts le plus compliqué que j'ai essayé de modifier jusqu'à présent :-(
  2. Comment faire pour que le script affiche le vert [ OK ] ? J'ai vérifié scripts comme httpd et j'ai vu que tout ce qu'ils faisaient était quelque chose comme indiqué ci-dessous. Mais je ne vois jamais le vert [ OK ] lorsque j'exécute php-fcgi . J'ai aussi découvert que mettre echo_success con functions sourcé affiche le vert [ OK ] mais je ne vois pas d'autres scripts dans le fichier /etc/rc.d/init.d/ exécution de echo_success o echo_failure . Qu'est-ce que j'ai fait de mal ?
  3. Aussi, comment puis-je spécifier PHP_FCGI_CHILDREN con daemon ?
echo
      [ $RETVAL -eq 0 ] && touch /var/lock/subsys/

3voto

quanta Points 49664
  1. Changez le daemon ligne à :

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

    &> /dev/null est équipvalent à >/dev/null 2>&1 signifie que redirige à la fois stdout et stderr vers /dev/null .

  2. Si cela ne montre pas le [ OK ] drapeau, essayez ceci :

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

    Jetez un coup d'œil à la success dans le /etc/init.d/functions pour plus de détails.

    El stop devrait se transformer en :

    killproc -p $PIDFILE $PHP_CGI_NAME
  3. Insérez le PHP_CGI_ARGS en tant que variable d'environnement à la daemon fonction :

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

De plus, pour qu'il démarre automatiquement au démarrage, vous devez changer l'info init pour le style basé sur Red Hat :

# chkconfig: 345 85 15
# description: Running php-cgi
# processname: php-cgi
# config: /etc/sysconfig/php-cgi

0 votes

Il devrait y avoir un écho après le success , failure ou warning fonctions, comme dans success; echo "Good job!"

0 votes

À titre d'information, je ne peux imprimer que la version [ OK ] message de success si j'utilise echo et je ne vois pas comment cela pourrait fonctionner autrement après avoir lu le code pour success ... Mais, il y a des morceaux de code montrant success messages sans echo Je n'ai aucune idée de comment cela peut fonctionner, donc si quelqu'un le comprend, dites-le moi.

2voto

devicenull Points 5542

Donc, vous êtes sur un système basé sur redhat, et vous voulez une version de PHP qui est fournie avec FPM (la meilleure façon de faire du cgi sur PHP >= 5.3) ? Pourquoi ne pas simplement installer les paquets à partir d'un endroit comme IUS : http://iuscommunity.org/ plutôt que d'essayer de faire fonctionner une version personnalisée ? Le référentiel vous permettra de rester à jour beaucoup plus facilement, et vous facilitera la vie en général.

Une fois que le dépôt est installé, c'est tout ce que vous avez à faire : chkconfig php-fpm start; service php-fpm start et vous serez prêt.

0 votes

Merci pour cette suggestion. Bien que cela m'aidera avec le CGI rapide, j'aimerais quand même savoir comment écrire des init scripts. J'ai essayé d'en lire quelques-uns, mais je ne suis pas en mesure de reproduire leur comportement.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X