我最近接手的網站在執行某個功能後,因為等待對方太久而網頁出現Gateway Time-out(超過2min),我想先延後time-out的時間,但有個疑問想請教,以下是我的處理流程:
[root@myserver conf]# systemctl stop httpd
Failed to stop httpd.service: Unit httpd.service not loaded.
Google到的解法都是執行以下指令,去補齊未正確安裝的部分
yum install httpd -y
但我想先知道為何我的apache沒有httpd.service?
我的apache路徑是 ./apache2.4/2.4.37-1/
如果是正常安裝httpd,路徑應該是./httpd/
我的apache是用甚麼方式去安裝?
2021-01-26補充:
感謝各位協助,我要補充:
systemctl status httpd
應該是 CentOS吧 看您下 yum .....
您原來的 httpd 有停止嗎 ? 如還沒停找一下程序
ps -ef |grep httpd
apache 59060 65239 0 13:57 ? 00:00:04 /usr/sbin/httpd -DFOREGROUND
root 65239 1 0 2020 ? 00:05:57 /usr/sbin/httpd -DFOREGROUND
apache 69513 65239 0 17:29 ? 00:00:01 /usr/sbin/httpd -DFOREGROUND
apache 69515 65239 0 17:29 ? 00:00:01 /usr/sbin/httpd -DFOREGROUND
apache 69516 65239 0 17:29 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND
apache 69518 65239 0 17:29 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND
apache 69531 65239 0 17:30 ? 00:00:01 /usr/sbin/httpd -DFOREGROUND
apache 69534 65239 0 17:30 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND
apache 73385 65239 0 18:48 ? 00:00:01 /usr/sbin/httpd -DFOREGROUND
apache 73387 65239 0 18:48 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 73390 65239 0 18:48 ? 00:00:01 /usr/sbin/httpd -DFOREGROUND
root 80461 80367 0 21:10 pts/0 00:00:00 grep --color=auto httpd
apache 88005 65239 0 Jan24 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND
裡面那個
root 65239 1 0 2020 ? 00:05:57 /usr/sbin/httpd -DFOREGROUND
這時用 ls 去看 proc
ls -la /proc/65239/exe
lrwxrwxrwx 1 root root 0 Nov 13 02:05 /proc/65239/exe -> /usr/sbin/httpd
你就看到程序了 ...在 /usr/sbin/httpd 這是yum 裝的
當然 nginx 也可用這方式找
如是 Ubuntu 也行只是 ps 找不同程序
如 httpd 已停 .... 可用大絕招 find
find / -name httpd -print
找到系統的是
/run/httpd
/usr/libexec/initscripts/legacy-actions/httpd
/usr/lib64/httpd
/usr/sbin/httpd
/usr/share/httpd
/etc/sysconfig/httpd
/etc/logrotate.d/httpd
/etc/httpd
/var/log/httpd
/var/cache/httpd
也有可能在 /usr/local/apache 下面 .....
前人可能不用系統 yum 安裝的
是其他方式安裝的如 XAMPP 或 LAMP 或手動編譯或寶塔Linux 都可裝到指定的目錄
# ps -ef |grep httpd
root 1391 1 0 01:10 ? 00:00:00 /app/products/apache-2.4/2.4.37-1/bin/httpd -f /app/instances/apache/elearn/conf/httpd.conf -k start
webrt 1395 1391 0 01:10 ? 00:00:00 /app/products/apache-2.4/2.4.37-1/bin/httpd -f /app/instances/apache/elearn/conf/httpd.conf -k start
webrt 1396 1391 0 01:10 ? 00:00:00 /app/products/apache-2.4/2.4.37-1/bin/httpd -f /app/instances/apache/elearn/conf/httpd.conf -k start
webrt 1397 1391 0 01:10 ? 00:00:00 /app/products/apache-2.4/2.4.37-1/bin/httpd -f /app/instances/apache/elearn/conf/httpd.conf -k start
webrt 1520 1391 0 01:11 ? 00:00:00 /app/products/apache-2.4/2.4.37-1/bin/httpd -f /app/instances/apache/elearn/conf/httpd.conf -k start
root 4274 1652 0 01:33 pts/0 00:00:00 grep --color=auto httpd
(執行結果跟您的不太一樣是否有問題?)
# ls -la /proc/1391/exe
lrwxrwxrwx 1 root root 0 Jan 26 01:35 /proc/1391/exe -> /app/products/apache-2.4/2.4.37-1/bin/httpd
以上我查到的結果,但不知道怎麼判斷是否停用?
ls -la /proc/.,在這目錄底下就是已在記憶體中,有查到就表示正在使用此service?
你的 httpd 裝在
/app/products/apache-2.4/2.4.37-1/bin/httpd
啟動 .... 猜在 rc.local 寫的 重開機會自動帶起
看應該是 原始碼編譯安裝 的
設定檔(你可修改內容 ... 記得先備份)
/app/instances/apache/elearn/conf/httpd.conf
如何原始碼編譯安裝 應該 google 的到
https://www.itread01.com/content/1543845491.html
我遇到問題,在/app/products/apache-2.4/2.4.37-1/bin,執行
# ./apachectl start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
(98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
(98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
AH00015: Unable to open logs
但/app/instances/apache/elearn/conf/httpd.conf有設定:
ServerName ${HOST}
這問題可以怎麼檢查?
看是 apache 已啟動
上面有告知 80 port 已被占用, log 也被占用了
要在/app/products/apache-2.4/2.4.37-1/bin,執行重啟才行
./apachectl restart
也有可能不是用這個方式啟動 apache 所以才說去看開機啟動 rc.local 有沒有啟動方式
或是最簡單方式 , 修改完設定檔
/app/instances/apache/elearn/conf/httpd.conf
reboot linux 讓系統重開自動帶起 apache
依照您貼出的訊息 :
第一行
那個 沒有 ServerName 是告警 系統將 ServerName 設為 127.0.0.1 ..不影響 apache 服務啟動
第二行
ipv6 的 80 port 被占用
第三行
ipv4 的 80 port 被占用
第四行
log 檔案被占用無法開啟
或許您對 linux 不熟 ... 下次就複製貼上那些訊息到 google 找 一下
您好
根據您說的啟動方式,我在/etc/init.d/找到客製化的apache(exe?)
# ./apache_elearn restart
Restarting service 'elearn':
============================================================
UID PID PPID C STIME TTY STAT TIME CMD
root 1395 1 0 01:10 ? Ss 0:01 /app/products/apache-2.4/2.4.37-1/bin/httpd -f /app/instances/apache/elearn/conf/httpd.conf -k start
COUNT TYPE
4 httpd
2 rotatelogs
============================================================
WARNING: Please check file '/var/app/apache/elearn/logs/error.log.20210128_000000'
for the line 'Apache ... configured -- resuming normal operations'
You can use the command
cat /var/app/apache/elearn/jptkolearnap03p/logs/error.log.20210128_000000
這樣應該算是重啟,測試後發現
我可能要再去找其他設定,非常感謝您的協助。
php.ini , max_execution_time
您好
php.ini有加入
max_execution_time = 600
max_input_time = 600
但沒有改變最大timeout時間
那個 php.ini 的目錄在哪 ? 不會是 /etc 那個吧 ....
既然前人的 apache 都能用指定目錄去安裝
php 會不會也是安裝到特定的目錄 ?
修改位置是透過phpinfo()找到的路徑,如下
/app/products/php/7.2.20-1/lib/php.ini
不過我隔天發現timeout時間延長了,
httpd.conf、php.ini都維持前一天的狀態,維持在Timeout=150、max_execution_time=600,而網頁timeout變成2.5min。
會是因為過了一段時間,httpd service從記憶體被釋放,然後重新啟用時才使用我更新後的設定?
下次建議您重開整台機器(如果許可)
所有服務會重啟且套用設定
你是不是搞錯你的系統阿?
Ubuntu上的是apache
centos的才是httpd
有可能你的安裝路徑就是Ubuntu 才沒有httpd
那個錯誤並不是告你HTTPD Service沒有安裝或不存在, 而是因為在啟動過程中, 因組態或種種因素, HTTPD Service沒有啟動, 於是最後系統檢查HTPPD.service時, 沒找到啟動的服務, 於是告訴你Not Loading.
你應該看下Log, 或者, 手動啟動TTPD.service, 看看那裏報錯. 多半, 不是Config檔案有誤, 就是virtual Directory設定有誤.或是config和virtual Directory的設定互相抵觸.