上次自行搭建好LNMP環境後,只有mysql可以直接用服務設置自啓動,nginx和php-fpm都要手動開啓,於是寫了個簡單的腳本:
#!/bin/bash cd /usr/local/nginx/sbin ./nginx cd /usr/local/php/sbin ./php-fpm
每次啓動系統後ssh進去運行這個腳本。
因爲覺得這樣比較麻煩,於是參考網上的自啓動腳本來進行設置。但是設置後服務器提示錯誤
開始以爲是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上,查看了下啓動日誌,果然是的:
果然是啓動腳本寫得有問題,回去看了看沒看出什麼問題,索性找了一個php-fpm5.2的啓動腳本,結果還是不行,繼續看log:
看來是啓動是參數的問題,看了看啓動的代碼:
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