2016-05-21 15 views
2

Ich habe this tutorial verfolgt, um mehrere PHP-FPM-Master für jede meiner Wordpress Multisite-Installationen einzurichten, so dass sie unabhängig voneinander in Bezug auf APC-Cache und andere Optionen ausgeführt werden können.Wie erstellt man mehrere PHP-FPM-Master auf Ubuntu 14.04?

Nachdem Sie den Anweisungen zum Buchstaben gefolgt haben, wird jedes neue php5-fpm init.d-Skript nicht initialisiert oder ausgeführt.
Auch /var/run/php5-fpm-master2.pid und php5-fpm-master2.sock werden nicht erstellt. Wenn ich bedenke, dass ich den Anweisungen gefolgt bin, gehe ich davon aus, dass entweder seine distro/package Versionen anders sind oder mir etwas zwischen den Zeilen fehlt.

Jeder bereit zu teilen, wie man mehrere PHP-FPM Master (Standard-PHP5-fpm von Apt-Get) auf Ubuntu 14.04 richtig einrichten?

Antwort

2

Ich benutze nicht Ubuntu, sondern Debian Jessie, die hier gleich sein sollte.

Zunächst gehen Sie zu .

Dort müssen Sie Ihre Pools erstellen, e. G. eine mit dem Dateinamen www1.conf:

[www1] 
user = www1 
group = www1 

listen = /var/run/php5-fpm-www1.sock 
listen.owner = www1 
listen.group = www1 
listen.allowed_clients = 127.0.0.1 

pm = ondemand 
pm.max_children = 100 
pm.process_idle_timeout = 5s; 
chdir =/

Erstellen Sie eine zweite, e. G. mit dem Dateinamen www2.conf:

[www2] 
user = www2 
group = www2 

listen = /var/run/php5-fpm-www2.sock 
listen.owner = www2 
listen.group = www2 
listen.allowed_clients = 127.0.0.1 

pm = ondemand 
pm.max_children = 100 
pm.process_idle_timeout = 5s; 
chdir =/

Gehen Sie jetzt zu /etc/php5/fpm und die php-fpm.conf darin (Backup in einem separaten Verzeichnis wäre nützlich) entfernen. Erstellen Sie nun die Datei php-fpm-www1.conf mit folgendem Inhalt:

[global] 
pid = /var/run/php5-fpm-www1.pid 
error_log = /var/log/php5-fpm-www1.log 
syslog.ident = php-fpm-www1 
log_level = notice 
emergency_restart_threshold = 10 
emergency_restart_interval = 1m 
include=/etc/php5/fpm/pool.d/www1.conf 

Ähnlich dem, erstellen Sie die Datei php-fpm-www2.conf:

[global] 
pid = /var/run/php5-fpm-www2.pid 
error_log = /var/log/php5-fpm-www2.log 
syslog.ident = php-fpm-www2 
log_level = notice 
emergency_restart_threshold = 10 
emergency_restart_interval = 1m 
include=/etc/php5/fpm/pool.d/www2.conf 

Das ist die vollständige Konfiguration, die Sie benötigen. Der wichtigste Teil ist ein richtiges Init-Skript. Unter Debian habe ich einfach den Standard /etc/init.d/php5-fpm kopiert.

Datei /etc/init.d/php5-fpm-www1:

#!/bin/sh 
### BEGIN INIT INFO 
# Provides:   php5-fpm-www1 
# Required-Start: $remote_fs $network 
# Required-Stop:  $remote_fs $network 
# Default-Start:  2 3 4 5 
# Default-Stop:  0 1 6 
# Short-Description: starts php5-fpm-www1 
# Description:  Starts The PHP FastCGI Process Manager Daemon 
### END INIT INFO 

# Author: Ondrej Sury <[email protected]> 

PATH=/sbin:/usr/sbin:/bin:/usr/bin 
DESC="PHP5 FastCGI Process Manager" 
NAME=php5-fpm-www1 
BIN=php5-fpm 
DAEMON=/usr/sbin/$BIN 
DAEMON_ARGS="--daemonize --fpm-config /etc/php5/fpm/php-fpm-www1.conf" 
CONF_PIDFILE=$(sed -n 's/^pid\s*=\s*//p' /etc/php5/fpm/php-fpm-www1.conf) 
PIDFILE=${CONF_PIDFILE:-/run/php5-fpm-www1.pid} 
TIMEOUT=30 
SCRIPTNAME=/etc/init.d/$NAME 

# Exit if the package is not installed 
[ -x "$DAEMON" ] || exit 0 

# Read configuration variable file if it is present 
[ -r /etc/default/$NAME ] && . /etc/default/$NAME 

# Load the VERBOSE setting and other rcS variables 
. /lib/init/vars.sh 

# Define LSB log_* functions. 
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present. 
. /lib/lsb/init-functions 

# Don't run if we are running upstart 
if init_is_upstart; then 
    exit 1 
fi 

# 
# Function to check the correctness of the config file 
# 
do_check() 
{ 
    /usr/lib/php5/php5-fpm-checkconf || return 1 
    return 0 
} 

# 
# Function that starts the daemon/service 
# 
do_start() 
{ 
    # Return 
    # 0 if daemon has been started 
    # 1 if daemon was already running 
    # 2 if daemon could not be started 
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ 
     || return 1 
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ 
     $DAEMON_ARGS 2>/dev/null \ 
     || return 2 
    # Add code here, if necessary, that waits for the process to be ready 
    # to handle requests from services started subsequently which depend 
    # on this one. As a last resort, sleep for some time. 
} 

# 
# Function that stops the daemon/service 
# 
do_stop() 
{ 
    # Return 
    # 0 if daemon has been stopped 
    # 1 if daemon was already stopped 
    # 2 if daemon could not be stopped 
    # other if a failure occurred 
    start-stop-daemon --stop --quiet --retry=QUIT/$TIMEOUT/TERM/5/KILL/5 --pidfile $PIDFILE --name $NAME 
    RETVAL="$?" 
    [ "$RETVAL" = 2 ] && return 2 
    # Wait for children to finish too if this is a daemon that forks 
    # and if the daemon is only ever run from this initscript. 
    # If the above conditions are not satisfied then add some other code 
    # that waits for the process to drop all resources that could be 
    # needed by services started subsequently. A last resort is to 
    # sleep for some time. 
    start-stop-daemon --stop --quiet --oknodo --retry=0/30/TERM/5/KILL/5 --name $NAME --exec $DAEMON 
    [ "$?" = 2 ] && return 2 
    # Many daemons don't delete their pidfiles when they exit. 
    rm -f $PIDFILE 
    return "$RETVAL" 
} 

# 
# Function that sends a SIGHUP to the daemon/service 
# 
do_reload() { 
    # 
    # If the daemon can reload its configuration without 
    # restarting (for example, when it is sent a SIGHUP), 
    # then implement that here. 
    # 
    start-stop-daemon --stop --signal USR2 --quiet --pidfile $PIDFILE --name $NAME 
    return 0 
} 

case "$1" in 
    start) 
    [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" 
    do_check $VERBOSE 
    case "$?" in 
     0) 
     do_start 
     case "$?" in 
      0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 
      2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; 
     esac 
     ;; 
     1) [ "$VERBOSE" != no ] && log_end_msg 1 ;; 
    esac 
    ;; 
    stop) 
    [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" 
    do_stop 
    case "$?" in 
     0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 
     2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; 
    esac 
    ;; 
    status) 
     status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? 
     ;; 
    check) 
     do_check yes 
    ;; 
    reload|force-reload) 
    log_daemon_msg "Reloading $DESC" "$NAME" 
    do_reload 
    log_end_msg $? 
    ;; 
    reopen-logs) 
    log_daemon_msg "Reopening $DESC logs" $NAME 
    if start-stop-daemon --stop --signal USR1 --oknodo --quiet \ 
     --pidfile $PIDFILE --exec $DAEMON 
    then 
     log_end_msg 0 
    else 
     log_end_msg 1 
    fi 
    ;; 
    restart) 
    log_daemon_msg "Restarting $DESC" "$NAME" 
    do_stop 
    case "$?" in 
     0|1) 
     do_start 
     case "$?" in 
      0) log_end_msg 0 ;; 
      1) log_end_msg 1 ;; # Old process is still running 
      *) log_end_msg 1 ;; # Failed to start 
     esac 
     ;; 
     *) 
     # Failed to stop 
     log_end_msg 1 
     ;; 
    esac 
    ;; 
    *) 
    echo "Usage: $SCRIPTNAME {start|stop|status|restart|reload|force-reload}" >&2 
    exit 1 
    ;; 
esac 

: 

Die Änderungen aus dem Standard-Init-Skript war:

Der Kommentar:

### BEGIN INIT INFO 
# Provides:   php5-fpm-www1 
# Required-Start: $remote_fs $network 
# Required-Stop:  $remote_fs $network 
# Default-Start:  2 3 4 5 
# Default-Stop:  0 1 6 
# Short-Description: starts php5-fpm-www1 
# Description:  Starts The PHP FastCGI Process Manager Daemon 
### END INIT INFO 

Hier haben Sie Linie 2 und 7 zu Ihrem Skript Namen ändern .

Konfiguration:

PATH=/sbin:/usr/sbin:/bin:/usr/bin 
DESC="PHP5 FastCGI Process Manager" 
NAME=php5-fpm-www1 
BIN=php5-fpm 
DAEMON=/usr/sbin/$BIN 
DAEMON_ARGS="--daemonize --fpm-config /etc/php5/fpm/php-fpm-www1.conf" 
CONF_PIDFILE=$(sed -n 's/^pid\s*=\s*//p' /etc/php5/fpm/php-fpm-www1.conf) 
PIDFILE=${CONF_PIDFILE:-/run/php5-fpm-www1.pid} 
TIMEOUT=30 
SCRIPTNAME=/etc/init.d/$NAME 

Ändern der NAME Variable auf Ihre Skriptnamen und fügen Sie die BIN Variable mit dem Namen Ihrer bin-Datei. Bearbeiten Sie außerdem die DAEMON, um $BIN statt $NAME zu entsprechen.,, CONF_PIDFILE und PIDFILE müssen bearbeitet werden, damit sie Ihren Konfigurationen in /etc/php5/fpm entsprechen.

Jetzt sollte das Skript den spezifischen PHP5-FPM-Master bereits starten.

Mein Problem war, dass ein /etc/init.d/php5-fpm-www1 stop auch den Master von www2 gestoppt hat.

Um dies zu beheben, dass Sie die do_stop() Funktion im Init-Skript zu bearbeiten haben:

do_stop() 
{ 
    # Return 
    # 0 if daemon has been stopped 
    # 1 if daemon was already stopped 
    # 2 if daemon could not be stopped 
    # other if a failure occurred 
    start-stop-daemon --stop --quiet --retry=QUIT/$TIMEOUT/TERM/5/KILL/5 --pidfile $PIDFILE --name $NAME 
    RETVAL="$?" 
    [ "$RETVAL" = 2 ] && return 2 
    # Wait for children to finish too if this is a daemon that forks 
    # and if the daemon is only ever run from this initscript. 
    # If the above conditions are not satisfied then add some other code 
    # that waits for the process to drop all resources that could be 
    # needed by services started subsequently. A last resort is to 
    # sleep for some time. 
    start-stop-daemon --stop --quiet --oknodo --retry=0/30/TERM/5/KILL/5 --name $NAME --exec $DAEMON 
    [ "$?" = 2 ] && return 2 
    # Many daemons don't delete their pidfiles when they exit. 
    rm -f $PIDFILE 
    return "$RETVAL" 
} 

Hier musste ich in der Schlange Sie 17.

Das gleiche die --name $NAME auf den zweiten start-stop-daemon Befehl hinzufügen mit Ihrer /etc/init.d/php5-fpm-www2-Datei an:

#!/bin/sh 
### BEGIN INIT INFO 
# Provides:   php5-fpm-www2 
# Required-Start: $remote_fs $network 
# Required-Stop:  $remote_fs $network 
# Default-Start:  2 3 4 5 
# Default-Stop:  0 1 6 
# Short-Description: starts php5-fpm-www2 
# Description:  Starts The PHP FastCGI Process Manager Daemon 
### END INIT INFO 

# Author: Ondrej Sury <[email protected]> 

PATH=/sbin:/usr/sbin:/bin:/usr/bin 
DESC="PHP5 FastCGI Process Manager" 
NAME=php5-fpm-www2 
BIN=php5-fpm 
DAEMON=/usr/sbin/$BIN 
DAEMON_ARGS="--daemonize --fpm-config /etc/php5/fpm/php-fpm-www2.conf" 
CONF_PIDFILE=$(sed -n 's/^pid\s*=\s*//p' /etc/php5/fpm/php-fpm-www2.conf) 
PIDFILE=${CONF_PIDFILE:-/run/php5-fpm-www2.pid} 
TIMEOUT=30 
SCRIPTNAME=/etc/init.d/$NAME 

# Exit if the package is not installed 
[ -x "$DAEMON" ] || exit 0 

# Read configuration variable file if it is present 
[ -r /etc/default/$NAME ] && . /etc/default/$NAME 

# Load the VERBOSE setting and other rcS variables 
. /lib/init/vars.sh 

# Define LSB log_* functions. 
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present. 
. /lib/lsb/init-functions 

# Don't run if we are running upstart 
if init_is_upstart; then 
    exit 1 
fi 

# 
# Function to check the correctness of the config file 
# 
do_check() 
{ 
    /usr/lib/php5/php5-fpm-checkconf || return 1 
    return 0 
} 

# 
# Function that starts the daemon/service 
# 
do_start() 
{ 
    # Return 
    # 0 if daemon has been started 
    # 1 if daemon was already running 
    # 2 if daemon could not be started 
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ 
     || return 1 
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ 
     $DAEMON_ARGS 2>/dev/null \ 
     || return 2 
    # Add code here, if necessary, that waits for the process to be ready 
    # to handle requests from services started subsequently which depend 
    # on this one. As a last resort, sleep for some time. 
} 

# 
# Function that stops the daemon/service 
# 
do_stop() 
{ 
    # Return 
    # 0 if daemon has been stopped 
    # 1 if daemon was already stopped 
    # 2 if daemon could not be stopped 
    # other if a failure occurred 
    start-stop-daemon --stop --quiet --retry=QUIT/$TIMEOUT/TERM/5/KILL/5 --pidfile $PIDFILE --name $NAME 
    RETVAL="$?" 
    [ "$RETVAL" = 2 ] && return 2 
    # Wait for children to finish too if this is a daemon that forks 
    # and if the daemon is only ever run from this initscript. 
    # If the above conditions are not satisfied then add some other code 
    # that waits for the process to drop all resources that could be 
    # needed by services started subsequently. A last resort is to 
    # sleep for some time. 
    start-stop-daemon --stop --quiet --oknodo --retry=0/30/TERM/5/KILL/5 --name $NAME --exec $DAEMON 
    [ "$?" = 2 ] && return 2 
    # Many daemons don't delete their pidfiles when they exit. 
    rm -f $PIDFILE 
    return "$RETVAL" 
} 

# 
# Function that sends a SIGHUP to the daemon/service 
# 
do_reload() { 
    # 
    # If the daemon can reload its configuration without 
    # restarting (for example, when it is sent a SIGHUP), 
    # then implement that here. 
    # 
    start-stop-daemon --stop --signal USR2 --quiet --pidfile $PIDFILE --name $NAME 
    return 0 
} 

case "$1" in 
    start) 
    [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" 
    do_check $VERBOSE 
    case "$?" in 
     0) 
     do_start 
     case "$?" in 
      0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 
      2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; 
     esac 
     ;; 
     1) [ "$VERBOSE" != no ] && log_end_msg 1 ;; 
    esac 
    ;; 
    stop) 
    [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" 
    do_stop 
    case "$?" in 
     0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 
     2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; 
    esac 
    ;; 
    status) 
     status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? 
     ;; 
    check) 
     do_check yes 
    ;; 
    reload|force-reload) 
    log_daemon_msg "Reloading $DESC" "$NAME" 
    do_reload 
    log_end_msg $? 
    ;; 
    reopen-logs) 
    log_daemon_msg "Reopening $DESC logs" $NAME 
    if start-stop-daemon --stop --signal USR1 --oknodo --quiet \ 
     --pidfile $PIDFILE --exec $DAEMON 
    then 
     log_end_msg 0 
    else 
     log_end_msg 1 
    fi 
    ;; 
    restart) 
    log_daemon_msg "Restarting $DESC" "$NAME" 
    do_stop 
    case "$?" in 
     0|1) 
     do_start 
     case "$?" in 
      0) log_end_msg 0 ;; 
      1) log_end_msg 1 ;; # Old process is still running 
      *) log_end_msg 1 ;; # Failed to start 
     esac 
     ;; 
     *) 
     # Failed to stop 
     log_end_msg 1 
     ;; 
    esac 
    ;; 
    *) 
    echo "Usage: $SCRIPTNAME {start|stop|status|restart|reload|force-reload}" >&2 
    exit 1 
    ;; 
esac 

: 

Bitte beachten Sie Ihre init zu halten Skript up-to-date, um eine regelmäßige Aktualisierung von php5-fpm ändert etwas.