今天早上,我启动了一台已经使用了 2 个月的机器,发现 Apache 并没有作为守护进程运行,在 /etc/init.d/ 中我发现了以下文件
-rwxr-xr-x 1 root root 0 2011-03-04 06:39 apache2
-rwxr-xr-x 1 root root 0 2011-02-03 06:40 apache2.1
-rwxr-xr-x 1 root root 6157 2010-04-14 01:50 apache2.2
我想说一下,我没有在 /etc/init.d/ 中创建这些 apache 文件,您会看到它们为 apache2.1 和 apache2.2,在浪费了一些时间来启动 apache 之后,我发现只
/etc/init.d/apache2.2 start
启动了 apache2 守护进程,而如果我使用 /etc/init.d/apache start 那么这将不起作用。
然后我在 ps 输出中看到以下内容
ps -el | grep apache2
1 S 0 2466 1 0 80 0 - 32139 poll_s ? 00:00:00 apache2
5 S 33 2617 2466 0 80 0 - 32268 inet_c ? 00:00:00 apache2
5 S 33 2625 2466 0 80 0 - 32310 inet_c ? 00:00:00 apache2
5 S 33 4211 2466 0 80 0 - 32271 inet_c ? 00:00:00 apache2
5 S 33 9072 2466 0 80 0 - 32179 inet_c ? 00:00:00 apache2
5 S 33 9079 2466 0 80 0 - 32177 inet_c ? 00:00:00 apache2
5 S 33 9080 2466 0 80 0 - 32177 inet_c ? 00:00:00 apache2
5 S 33 9081 2466 0 80 0 - 32179 inet_c ? 00:00:00 apache2
5 S 33 9082 2466 0 80 0 - 32177 inet_c ? 00:00:00 apache2
5 S 33 9083 2466 0 80 0 - 32179 inet_c ? 00:00:00 apache2
5 S 33 9084 2466 0 80 0 - 32177 poll_s ? 00:00:00 apache2
在 /etc/passwd 文件中我看到
www-data:x:33:33:www-data:/var/www:/bin/sh
因此剩余的进程有 33 个 uid 和 pid,与 www-data 相对应,但如果你注意到上面输出中的第一个进程的 uid 是 0
那么,如果我要问的话,apache 在这台机器上是否运行正常,或者我应该进一步调查我的服务器,它是否似乎被破坏了?文件 apache2.1 和 apache2 是空白的,只有 apache2.2 具有 init 等所需的功能。
答案1
不知道启动脚本。“主”Apache 进程应以 root 身份运行(您会注意到它是父进程的 pid 为 1 的进程)。passwd 中的条目看起来正确。
答案2
此行为在默认 Apache MPM(worker 和 prefork)中是预期的。父进程由 root 启动。通过fork
和系统调用,子进程放弃权限并以 www-data 用户(系统上的 uid 为 33)身份运行。此用户由中的指令setuid
控制。User
httpd.conf
Apache 文档在这儿。