FastCGI PHP does not start on server reboot (via rc script).

Maxim Khitrov mkhitrov at gmail.com
Sat Jul 28 03:15:01 UTC 2007


On 7/25/07, Maxim Khitrov <mkhitrov at gmail.com> wrote:
> On 7/24/07, Maxim Khitrov <mkhitrov at gmail.com> wrote:
> > Hello,
> >
> > I have this problem that I can't figure out. One of my web servers is
> > using a combination of lighttpd and FastCGI php to run a few sites. On
> > lighttpd website there is an rc script to help FreeBSD users start
> > FastCGI php processes automatically. I've pasted that script below.
> >
> > I should say that if I run it manually as root, everything works
> > beautifully. As you can see, the script creates a unix socket at
> > /var/run/fastcgi/php.sock, and lighttpd is then able to execute php
> > scripts. The problem is that every time the server is rebooted, the
> > script does not start back up. I have to start it manually. I can't
> > find any log entries that would indicate a problem, so I'm not even
> > sure where to start looking. Below is the script that I'm trying to
> > run, file permissions for relevant files, and contents of my rc.conf.
> >
> > Would greatly appreciate it if someone could at least tell me where to
> > start looking for a solution to this problem.
> >
> > Thanks,
> > Maxim Khitrov
> >
> > /etc/rc.conf:
> > fcgiphp_enable="YES"
> >
> > /var/run/fastcgi:
> > -rw-r--r--  1 www  www  -    5B Jul 24 17:06 php.pid
> > srwxr-xr-x  1 www  www  -    0B Jul 24 17:06 php.sock=
> >
> > /usr/local/etc/rc.d:
> > -r-xr-xr-x  1 root  wheel  -  1.6K May 23 17:28 fastcgi-php*
> >
> > /usr/local/etc/rc.d/fastcgi-php:
> > #!/bin/sh
> > #  FreeBSD rc.d script for fastcgi+php
> > #  in rc.conf
> > # fcgiphp_enable (bool):        Set it to "YES" to enable fastcgi+php
> > #                               Default is "NO".
> > # other options see below
> > #
> >
> > . /etc/rc.subr
> >
> > name="fcgiphp"
> > rcvar=`set_rcvar`
> >
> > load_rc_config $name
> >
> > : ${fcgiphp_enable="NO"}
> > : ${fcgiphp_bin_path="/usr/local/bin/php-cgi"}
> > : ${fcgiphp_user="www"}
> > : ${fcgiphp_group="www"}
> > : ${fcgiphp_children="2"}
> > : ${fcgiphp_port="8002"}
> > : ${fcgiphp_socket="/var/run/fastcgi/php.sock"}
> > : ${fcgiphp_env="SHELL PATH USER"}
> > : ${fcgiphp_max_requests="100"}
> > : ${fcgiphp_addr="localhost"}
> >
> >
> > pidfile=/var/run/fastcgi/php.pid
> > procname="${fcgiphp_bin_path}"
> > command_args="/usr/local/bin/spawn-fcgi 2> /dev/null -f
> > ${fcgiphp_bin_path} -u ${fcgiphp_user} -g ${fcgiphp_group} -C
> > ${fcgiphp_children} -P ${pidfile}"
> > start_precmd=start_precmd
> > stop_postcmd=stop_postcmd
> >
> > start_precmd()
> > {
> >         PHP_FCGI_MAX_REQUESTS="${fcgiphp_max_requests}"
> >         FCGI_WEB_SERVER_ADDRS=$fcgiphp_addr
> >         export PHP_FCGI_MAX_REQUESTS
> >         export FCGI_WEB_SERVER_ADDRS
> >         allowed_env="${fcgiphp_env} PHP_FCGI_MAX_REQUESTS FCGI_WEB_SERVER_ADDRS"
> > # copy the allowed environment variables
> >         E=""
> >         for i in $allowed_env; do
> >                 eval "x=\$$i"
> >                 E="$E $i=$x"
> >         done
> >         command="env - $E"
> >
> >         if [ -n "${fcgiphp_socket}" ]; then
> >                 command_args="${command_args} -s ${fcgiphp_socket}"
> >         elif [ -n "${fcgiphp_port}" ]; then
> >                 command_args="${command_args} -p ${fcgiphp_port}"
> >         else
> >                 echo "socket or port must be specified!"
> >                 exit
> >         fi
> > }
> >
> > stop_postcmd()
> > {
> >         rm -f ${pidfile}
> > #       eval "ipcs | awk '{ if (\$5 == \"${fcgiphp_user}\") print \"ipcrm -s
> > \"\$2}' | /bin/sh"
> > }
> >
> > run_rc_command "$1"
> >
>
> Sorry for replying to myself, but I forgot to mention that this server
> is actually running inside a jail. I have no idea if that has anything
> to do with it. I also have other services being started from
> /usr/local/etc/rc.d (lighttpd, mysql, and a few others), but this
> fastcgi script is the only one that fails to work.
>

One other thing to add... I moved the script from /usr/local/etc/rc.d/
to /etc/rc.d/ and it works perfectly. Didn't change a thing other than
where the script is running from. All my rc scripts in /etc are also
unmodified.

Is it really the case that no one has seen something like this before?
Why would a script run from one location, but not from another?
Especially given the fact that other scripts in /usr/local/etc/rc.d
are being executed normally.


More information about the freebsd-questions mailing list