日期:2014-05-17  浏览次数:20768 次

apache启动报错原因和解决方案
一. 现象
今天项目搭建测试环境时,启动apache报错,错误日志如下:
[wolf@ccbudev150133x bin]$ ./startws 
Start server copy ...... OK!
Start JBoss configuration copy ...... OK!

[color=red](13)Permission denied:[/color] make_sock: could not bind to address [::]:80
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
/home/wolf/legal/intl-legal/deploy/bin/apachectl start: httpd could not be started
HTTP Start in 19 seconds.


二、分析
从错误现象可以看出,apache启动监听80端口失败,原因是因为Permission denied,权限不够,httpd执行需要root权限,只需给apache启动脚本httpd授权即可。执行下面两条命令即可:
1. chmod u+s httpd
2. chown root httpd


三、我的弯路
出现这个问题后,我执行了第一条命令,重试,问题依旧。 在我原来的理解中,+s操作是给当前用户赋予root执行权限,所以误以为该文件已经是root执行权限,进而从其他方面排查原因。兜圈了一小时后,仅人提点,才发现原来对"chmod +s"理解有误。

四、 chmod命令
执行两条命令之前httpd文件特性:
-rwxr-xr-x 1 wolf admin   2429431 Nov  4 13:35 httpd

执行两条命令之后:
-rwsr-xr-x 1 root admin 2429431 Nov  4 13:35 httpd

chmod命令+s参数解释如下:
s 在文件执行时把进程的属主或组ID置为该文件的文件属主。
原来只有wolf这个用户可以执行httpd这条命令, u+s后其他用户都可享有文件属主的权限。通过chown将文件属主调整为root,这样其他用户即可以root权限操作该文件。

五、 示例
通常开发过程中需要编辑/etc/hosts文件,每次编辑以sudo方式执行,每次都要输入密码令人不爽,通过执行以下命令即可解决:
chmod u+s /etc/hosts