主機 Linux Apache 啟動經(jīng)常遇到各種錯誤,有的會導致 Apache 啟動失敗,本文對常見錯誤及解決辦法進行說明。
Fatal error initialising mod_ssl, exiting
錯誤模塊 php5ts.dll,錯誤地址 0x000e890c
No space left on device: Couldn\'t create accept lock
Starting httpd: httpd: bad user name apache
Could not reliably... qualified domain name
主機 Linux Apache 因 mod_ssl 啟動失敗
問題現(xiàn)象一:
查看Apache錯誤日志如下:
執(zhí)行配置檢查 /alidata/server/httpd/bin/apachectl configtest,報錯如下
問題原因
mod_ssl.so 模塊加載異常
解決方案
重新編譯異常模塊
到 Apache 源碼路徑(以一鍵安裝包為例)
/root/sh/sh-1.4.1/httpd-2.4.10/modules/ssl
1、執(zhí)行如下命令:
/alidata/server/httpd/bin/apxs -a -i -c -L /usr/lib64/openssl/engines/lib -c *.c -lcrypto -lssl -ldl
出現(xiàn)如下信息,代表編譯正常:
2、再次執(zhí)行配置檢查 /alidata/server/httpd/bin/apachectl configtest,通過。
3、啟動 Apache 成功
問題現(xiàn)象二:主機 Windows Apache 啟動報錯:錯誤模塊 php5ts.dll,錯誤地址 0x000e890c
啟動 httpd 時,出現(xiàn)錯誤,查看日志,Apache 的 error.log 中記錄為:
[warn] pid file D:/Program Files/Apache Software Foundation/Apache2.2/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
Windows 的事件查看器/應用程序中顯示為:
Application Error 中事件詳細信息:錯誤應用程序 httpd.exe,版本 2.2.17.0,錯誤模塊 php5ts.dll,版本 t5.3.5.0,錯誤地址 0x000e890c。
問題原因
涉及 php5ts.dll 錯誤的處理,一類是因為 PHP 只能使用自身版本的 dll,如果出現(xiàn)因為系統(tǒng)路徑變量的原因,導致其他版本的 dll 先行引用,則出現(xiàn)錯誤。
針對此類錯誤,或是刪除其他版本 dll;或修改系統(tǒng) PATH 變量,將 PHP 的放在前面;或?qū)?span lang=EN-US> PHP 的 dll 放到系統(tǒng)的 System32 目錄下。
不過,若確認路徑?jīng)]有問題,PATH 變量中 PHP 的安裝目錄還在 System32 前,也沒有其他版本的 php5ts.dll,讓然存在問題,請參考如下解決方法。
解決方案
查看 errorlog,找到報錯無法 load 的模塊,如下
[14-Mar-2011 10:22:15] PHP Warning: PHP Startup: Unable to load dynamic library \'D:\\Program Files\\PHP\\ext\\php_oci8.dll\' - 找不到指定的模塊。 in Unknown on line 0
[14-Mar-2011 10:22:15] PHP Warning: PHP Startup: Unable to load dynamic library \'D:\\Program Files\\PHP\\ext\\php_oci8_11g.dll\' - 找不到指定的模塊。 in Unknown on line 0
[14-Mar-2011 10:22:15] PHP Warning: PHP Startup: Unable to load dynamic library \'D:\\Program Files\\PHP\\ext\\php_pdo_oci.dll\' - 找不到指定的模塊。 in Unknown on line 0
[14-Mar-2011 10:22:15] PHP Warning: PHP Startup: Unable to load dynamic library \'D:\\Program Files\\PHP\\ext\\php_sybase_ct.dll\' - 找不到指定的模塊。 in Unknown on line 0
回到 php.ini 中,將上面 4 個模塊注釋掉:
[PHP_OCI8]
;extension=php_oci8.dll
[PHP_OCI8_11G]
;extension=php_oci8_11g.dll
[PHP_PDO_OCI]
;extension=php_pdo_oci.dll
[PHP_SYBASE_CT]
;extension=php_sybase_ct.dll
重新啟動 Apache 成功。
問題現(xiàn)象三:主機 Apache 啟動失敗,日志錯誤:No space left on device: Couldn\'t create accept lock
Apache 啟動未報任何錯誤,但是啟動后 ps -ef | grep httpd 看不到進程。errror_log 顯示:No space left on device: Couldn\'t create accept lock
但是查看空間是正常的,沒有空間不足的情況。
問題原因
用戶進程通信信號量達到限制導致
解決方案
ipcs -s | grep nobody #nobody 是創(chuàng)建 Apache 進程的用戶名,一般情況下 daemon,根據(jù)自己的實際情況寫。
使用 ipcs -s -l 可以查看當前系統(tǒng)的設置。
使用 ipcs -su 可以查看當前的使用量
使用 ipcs -s | grep nobody | awk \'{print "ipcrm -s" $2}\'|sh 可以 kill 掉信號。
然后重新啟動 Apache 進程即可。
/etc/init.d/httpd -k start
問題現(xiàn)象四:主機 Apache 啟動報錯:Starting httpd: httpd: bad user name apache
啟動 Apache 的時候(例如使用命令“:/etc/init.d/httpd start”)出現(xiàn)錯誤 :Starting httpd: httpd: bad user name apache(如下圖)
問題原因
造成該問題的原因是系統(tǒng)中不存在用戶 apache,因此導致啟動失敗。
驗證是否存在 apache 用戶,可執(zhí)行命令:
id apache
如提示 “id: apache: No such user”,則說明 apache 用戶不存在。
解決方案
用以下命令:
useradd apache
新創(chuàng)建一個 Apache 用戶,然后再啟動 httpd。
問題現(xiàn)象五:主機 Apache 啟動告警:Could not reliably... qualified domain name
Apache 啟動報錯如下:
問題原因
這是 Apache 的提示信息,因為在配置文件 httpd.conf 中沒有綁定域名,這個提示信息就是告訴用戶,需要給 Apache 綁定域名。
解決方案
修改 Apache 的配置文件
1.找到 Apache 配置文件的路徑,例如一鍵安裝腳本的路徑是:/alidata/server/httpd/conf/ 目錄
2.編輯 Apache的 配置文件:httpd.conf
找到 ServerName 一行,將默認的
#ServerName www.example.com:80
取消#號修改為
ServerName 127.0.0.1
注意:也可以自定義域名
3.啟動 Apache 服務