Tôi nhận thấy rằng trên máy chủ linux của tôi khi tôi gõ apachectl, nó cung cấp cho tôi những phản hồi nhỏ nhưng hữu ích như restarting
và sau đó [ok]
hoặc là [fail]
ở cuối dòng. Không nhiều, nhưng ít nhất tôi biết những gì đang xảy ra, và tôi có thể kiểm tra nhật ký.
Trên OS X của tôi, tôi không nhận được gì. chỉ dòng tiếp theo ngay lập tức:
sh-3.2# /usr/sbin/apachectl stop
sh-3.2# /usr/sbin/apachectl start
sh-3.2#
Làm cách nào tôi có thể kích hoạt các tính năng 'gỡ lỗi' đó?
Làm thế nào về kịch bản trình bao bọc apachectl bạn dán một cái gì đó như thế này vào cuối.
tail -5 /var/log/httpd/error_log
bạn sẽ thấy một cái gì đó như thế này trong một khởi động bình thường
Nếu không, bất kỳ lỗi nào ít nhất một phần sẽ được hiển thị ở đây. Các cụm từ chính được hilight ở trên.
Bổ sung:/usr/sbin/apachectl được sở hữu bởi root, bạn phải là người dùng đặc quyền để làm điều này. Sudo vi/usr/sbin/apachectl
di chuyển đến cuối tập tin và chèn đoạn này vào giữa dòng "esac" và "exit $ ERROR". I E.
esac
sleep 2; tail -5 /var/log/httpd/error_log
exit $ERROR
Lưu ý điều này sẽ in ra một vài dòng cuối cùng bất kể bạn thực hiện hành động nào với tập lệnh, dừng bắt đầu, khởi động lại. bạn có thể chỉ muốn đặt nó trong phần bắt đầu của tuyên bố trường hợp.
Tôi có cùng một vấn đề trên máy Mac của tôi. Khi tôi cố gắng khởi động Apache và không có gì xảy ra, tôi lập tức chạy lệnh này. Trong trường hợp của tôi, vấn đề dường như luôn nằm ở các tệp cấu hình Apache.
apachectl configtest
apachectl
trên Mac là trình bao bọc xung quanh một số lệnh launchctl
(chỉ cần nhìn vào tệp). Thật không may, launchctl không thoát với mã lỗi khi có lỗi xảy ra khi bắt đầu httpd
, vì vậy tập lệnh không có cách nào dễ dàng để hiển thị bất cứ thứ gì, ngay cả khi nó cố gắng.
Một kiểm tra cơ bản mà bạn có thể tự thực hiện là kiểm tra sự tồn tại của các quy trình Apache sau apachectl start
chỉ huy.
ps aux | grep httpd
Trên macOS với lệnh netstat
hiển thị tất cả kết nối mạng. Bạn chỉ có thể lọc các kết nối 'nghe' và xem các máy chủ http (s).
Bạn có thể tạo một tệp bash với mã này:
status="$(netstat -at | grep LISTEN | grep *.http)"
count="$(echo "${status}" | grep -Ev "^$" | wc -l)"
if [ ${count} -eq 0 ] ; then
echo " Apache server is not running"
fi
echo "${status}" |
while IFS= read -r line
do
echo " ${line}"
done
Kết quả khi máy chủ bị dừng Sudo apachectl -k stop
sẽ là:
Apache server is not running
Kết quả khi máy chủ đang chạy Sudo apachectl -k stop
sẽ là:
tcp46 0 0 *.https *.* LISTEN
tcp46 0 0 *.http *.* LISTEN
Trong ví dụ này tôi có hai máy chủ đang chạy, một với https và một với http.