iT邦幫忙

0

為何我Server上的Apache沒有httpd.service?

我最近接手的網站在執行某個功能後,因為等待對方太久而網頁出現Gateway Time-out(超過2min),我想先延後time-out的時間,但有個疑問想請教,以下是我的處理流程:

  1. 到conf/httpd.conf的最後一行加入 TimeOut 300 << 設定好了
  2. 關閉,再啟動apache << 無法執行,如下圖
[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補充:
感謝各位協助,我要補充:

  1. 系統是CentOS 7
  2. service是否停用的檢查指令,我只會使用
systemctl status httpd
  1. 我測到使用
    http://localhost/dashboard/ << 不存在
    http://localhost/phpMyAdmin/index.php << 存在。
看更多先前的討論...收起先前的討論...
雷伊 iT邦好手 1 級 ‧ 2021-01-25 13:38:02 檢舉
到 /usr/local/ 下看有沒有類似XAMPP安裝的痕跡
https://a091234765.pixnet.net/blog/post/403781468-%5B%E7%B6%B2%E9%A0%81%E6%8A%80%E5%B7%A7%E5%AD%B8%E7%BF%92%E7%AD%86%E8%A8%98%5Dxampp-mysql%E7%99%BB%E5%85%A5%E8%A8%AD%E7%BD%AE
eric1223 iT邦新手 5 級 ‧ 2021-01-26 10:23:39 檢舉
您好
我的系統是CentOS 7,上網看XAMPP預設安裝路徑是/opt/lampp,但我的路徑上沒有相關folder,測試http://localhost/dashboard/ 是不存在,但http://localhost/phpMyAdmin/index.php 是存在,這種情況可能會是透過XAMPP安裝?
ayu iT邦好手 3 級 ‧ 2021-01-26 21:45:54 檢舉
你的apache並不是用預設的套件管理方式去安裝的.
修改完 /app/instances/apache/elearn/conf/httpd.conf 之後,
再執行 /app/products/apache-2.4/2.4.37-1/bin/httpd -f /app/instances/apache/elearn/conf/httpd.conf -k restart (或graceful)重啟
eric1223 iT邦新手 5 級 ‧ 2021-01-27 14:48:48 檢舉
1. /app/instances/apache/elearn/conf/httpd.conf 加入TimeOut 設定
2. 到/app/products/apache-2.4/2.4.37-1/bin,執行/app/products/apache-2.4/2.4.37-1/bin/httpd -f /app/instances/apache/elearn/conf/httpd.conf -k restart
失敗,訊息如下:
'''
[Wed Jan 27 05:08:34.462451 2021] [core:warn] [pid 20922:tid 140667666614080] AH00111: Config variable ${APACHE_DIR} is not defined
httpd: Syntax error on line 28 of /app/instances/apache/elearn/conf/httpd.conf: ServerRoot must be a valid directory
'''
目前網站能正常使用,就表示apache設定都是正常的,為何上述的錯誤訊息表示ServerRoot需要提供有效的路徑?
'''
/app/instances/apache/elearn/conf/httpd.conf的當前設定如下:
ServerRoot "${APACHE_DIR}"
'''
'''
/app/products/apache-2.4/2.4.37-1/conf/httpd.conf的當前設定如下:
ServerRoot "/app/products/apache-2.4/2.4.37-1"
'''
該如何判斷真正使用的conf是哪一個?
1
echochio
iT邦高手 1 級 ‧ 2021-01-25 21:22:11
最佳解答

應該是 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 都可裝到指定的目錄

看更多先前的回應...收起先前的回應...
eric1223 iT邦新手 5 級 ‧ 2021-01-26 10:09:08 檢舉
# 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?

echochio iT邦高手 1 級 ‧ 2021-01-27 02:13:24 檢舉

你的 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

eric1223 iT邦新手 5 級 ‧ 2021-01-27 15:18:11 檢舉

我遇到問題,在/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}

這問題可以怎麼檢查?

echochio iT邦高手 1 級 ‧ 2021-01-28 10:58:49 檢舉

看是 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 找 一下

eric1223 iT邦新手 5 級 ‧ 2021-01-28 17:22:49 檢舉

您好
根據您說的啟動方式,我在/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

這樣應該算是重啟,測試後發現

  1. Timeout時間還是在2min
  2. 但如果把conf/httpd.conf的Timeout設為10sec,網頁確實會變成10sec就timeout,也就說設定修改後在重啟apache是可以成功修改timeout,只是有其他設定限制2min。

我可能要再去找其他設定,非常感謝您的協助。

ayu iT邦好手 3 級 ‧ 2021-01-29 00:16:17 檢舉

php.ini , max_execution_time

eric1223 iT邦新手 5 級 ‧ 2021-01-29 09:00:34 檢舉

您好
php.ini有加入
max_execution_time = 600
max_input_time = 600
但沒有改變最大timeout時間

echochio iT邦高手 1 級 ‧ 2021-01-30 17:53:03 檢舉

那個 php.ini 的目錄在哪 ? 不會是 /etc 那個吧 ....
既然前人的 apache 都能用指定目錄去安裝
php 會不會也是安裝到特定的目錄 ?

eric1223 iT邦新手 5 級 ‧ 2021-02-01 09:41:22 檢舉

修改位置是透過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從記憶體被釋放,然後重新啟用時才使用我更新後的設定?

echochio iT邦高手 1 級 ‧ 2021-02-02 09:38:04 檢舉

下次建議您重開整台機器(如果許可)
所有服務會重啟且套用設定

1
hsiang11
iT邦好手 1 級 ‧ 2021-01-25 17:14:33

你是不是搞錯你的系統阿?
Ubuntu上的是apache
centos的才是httpd
有可能你的安裝路徑就是Ubuntu 才沒有httpd

eric1223 iT邦新手 5 級 ‧ 2021-01-26 10:31:26 檢舉

您好
感謝您提醒,我的系統是CentOS 7,
httpd路徑是/app/products/apache-2.4/2.4.37-1/bin/httpd

但我用模擬機安裝httpd,路徑卻是
/etc/httpd/..

所以很疑惑前人安裝httpd是怎麼裝的?

0
賽門
iT邦超人 1 級 ‧ 2021-01-26 08:38:52

那個錯誤並不是告你HTTPD Service沒有安裝或不存在, 而是因為在啟動過程中, 因組態或種種因素, HTTPD Service沒有啟動, 於是最後系統檢查HTPPD.service時, 沒找到啟動的服務, 於是告訴你Not Loading.
你應該看下Log, 或者, 手動啟動TTPD.service, 看看那裏報錯. 多半, 不是Config檔案有誤, 就是virtual Directory設定有誤.或是config和virtual Directory的設定互相抵觸.

eric1223 iT邦新手 5 級 ‧ 2021-01-26 11:00:17 檢舉

您好
感謝您的提醒,請教一下virtual Directory要怎麼檢查?
另外,我注意到連/var/log/路徑下都沒有httpd相關的log file,我不太知道該怎麼去找log是否存在某處?

0
灰灰
iT邦新手 2 級 ‧ 2021-02-25 15:57:09

建議找專業的幫你吧!! 不然LINUX 亂搞.......真的#$^$%^
如果是想學那就先找本書看看或是網路教學.

我要發表回答

立即登入回答