上次自行搭建好LNMP环境后,只有mysql可以直接用服务设置自启动,nginx和php-fpm都要手动开启,于是写了个简单的脚本:

#!/bin/bash
cd /usr/local/nginx/sbin
./nginx
cd /usr/local/php/sbin
./php-fpm

每次启动系统后ssh进去运行这个脚本。

因为觉得这样比较麻烦,于是参考网上的自启动脚本来进行设置。但是设置后服务器提示错误

001251638.png

开始以为是nginx的问题,ps aux | grep nginx查看了下,有进程。又怀疑是文件权限的问题,于是去把nginx下的文件全部所有者和组都设置为nobody,重启后错误依旧。折腾了许久,想起来应该去查看error.log,看到里面提示错误"connect() failed (111: Connection refused) while connecting to upstream",搜索了下,看到有个类似问题的回复:

'Connection refused' means that backend does not listen to the port 9000 or its queue is filled up. This problem is related to the backend itsef. Are you able to telnet localhost 9000? You should also check your backend and php logs. – AndrewOct 1 '11 at 9:17

看来错误应该是在php-fpm上,查看了下启动日志,果然是的:

002246403.png

果然是启动脚本写得有问题,回去看了看没看出什么问题,索性找了一个php-fpm5.2的启动脚本,结果还是不行,继续看log:

002518576.png

看来是启动是参数的问题,看了看启动的代码:

case "$1" in
    start)
        echo -n "Starting php_fpm "
        $php_fpm_BIN --fpm $php_opts
        if [ "$?" != 0 ] ; then
            echo " failed"
            exit 1
        fi
        wait_for_pid created $php_fpm_PID
        if [ -n "$try" ] ; then
            echo " failed"
            exit 1
        else
            echo " done"
        fi
    ;;

其中

php_fpm_BIN=/usr/local/php/bin/php-cgi
php_fpm_CONF=/usr/local/php/etc/php-fpm.conf

从错误信息看,不能直接使用--fpm这个参数,索性把 后面参数注释掉了,再reboot,访问网站,OK!

折腾了这么久,得出的经验是出错一定要看日志!


不过在这个过程中也了解了系统服务和脚本自启动的方式,init.d里的脚本默认以start的选项运行,推荐一篇文章《理解Linux系统/etc/init.d目录和/etc/rc.local脚本》

顺便也温习了下vim的诸多用法,比如多窗口,vim环境下执行shell命令等。


最后附上我下载的两个脚本地址:

http://soft.vpser.net/lnmp/ext/init.d.nginx

http://soft.vpser.net/lnmp/ext/init.d.php-fpm5.2