Apache 服务启动不了

{我是新手,从未遇到此问题,请各位大大勿喷}

时间:2016-07-11

事由:今天早上上班突然发现公司网站出现问题。经过排查,发现是Apache出现问题。首先检查配置文件没有出问题后,启动服务发现Apache服务能启动,但是没法关闭,没法重启。这是什么原因呢?

解决办法:(出现任何问题首先要想到的就是日志)

查看httpd日志:

tail -f /var/log/httpd/error_log

果然,显示了以下报错:

[Mon Jul 11 09:04:07 2016] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Mon Jul 11 09:04:07 2016] [notice] Digest: generating secret for digest authentication ...

 既然找到问题了,那我们就来解决呗!

关键字:suEXEC

解决办法:

输入:ipcs -s  看有没有超过5个
这命令是显示信号量集的,什么是信号量集呢?
哈哈 我也解释不清楚,自己百度吧

然后显示以下结果:

------ Semaphore Arrays --------
key        semid      owner      perms      nsems     
0x00000000 0          root       600        1         
0x00000000 32769      root       600        1         
0x00000000 3604482    4294967295 600        1         
0x00000000 3637251    4294967295 600        1         
0x00000000 4784132    4294967295 600        1         
0x00000000 4816901    4294967295 600        1         
0x00000000 1048582    4294967295 600        1         
0x00000000 229383     4294967295 600        1         
0x00000000 262152     4294967295 600        1         
0x00000000 491529     4294967295 600        1         
0x00000000 524298     4294967295 600        1         
0x00000000 557067     4294967295 600        1         
0x00000000 589836     4294967295 600        1         
0x00000000 1081357    4294967295 600        1         
0x00000000 1114126    4294967295 600        1         
0x00000000 1146895    4294967295 600        1         
0x00000000 1245200    4294967295 600        1         
0x00000000 1277969    4294967295 600        1         
0x00000000 1638418    4294967295 600        1       

 执行后,显示结果把我看懵了,怎么会这么多?

哎 那就解决呗!

使用以下命令:

ipcs -s | grep apache | perl -e 'while (<STDIN>) { @a=split(/\s+/); print `ipcrm sem $a[1]`}'

 然后再重启Apache服务就解决了。

以下是ipcs参数的详解与用法:(自己用请勿喷)

ipcs可用来显示当前Linux系统中的共享内存段、信号量集、消息队列等的使用情况。
命令示例:
ipcs -a或ipc 显示当前系统中共享内存段、信号量集、消息队列的使用情况;
ipcs -m 显示共享内存段的使用情况;
ipcs -s 显示信号量集的使用情况;
ipcs -q 显示消息队列的使用情况;
ipcrm可用来删除对应的共享内存段、信号量、消息队列;
命令示例:
ipcrm -s semid 删除对应的信号量集
ipcrm -m shmid 删除对应的共享内存段
ipcrm -q msqid 删除对应的消息队列
ipcrm本身只能实现单个资源的删除,利用以下命令可实现批量删除(zhangsj版权所有,呵呵):
1.ipcs -s|grep 用户名|cut -d" " -f2|xargs -n1 ipcrm -s
2.ipcs -s|awk '/用户名/{print $2}'|xargs -n1 ipcrm -s
3.ipcs -s|awk '/用户名/{system("ipcrm -s "$2)}'
4.for i in echo `ipcs|grep 用户名|cut -d" " -f2`; do ipcrm -s $i; done

相关推荐