1

我想在一个 CentOS 机器上运行多个 httpd 服务,这样如果我正在开发一个 mod_perl 脚本并且需要重新启动其中一个,其他的就可以独立运行。我在 Windows 上进行了此设置并正在迁移。

当然,这意味着单独的 PID 文件。我使用 httpd.conf 中的 PidFile 指令配置我的,并将 init.d 脚本指向同一个地方。它可以创建文件,但不会使用所有 PID 填充它:

$ sudo killall httpd ; sudo service httpd-dev restart
Stopping httpd: cat: /var/run/httpd/httpd-dev.pid: No such file or directory
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]

Starting httpd:                                            [  OK  ]
$ sudo cat /var/run/httpd/httpd-dev.pid
18279
$ ps -A | grep httpd
18279 ?        00:00:00 httpd
18282 ?        00:00:00 httpd
18283 ?        00:00:00 httpd
18284 ?        00:00:00 httpd
18285 ?        00:00:00 httpd
18286 ?        00:00:00 httpd
18287 ?        00:00:00 httpd
18288 ?        00:00:00 httpd
18289 ?        00:00:00 httpd

……为什么会这样?当以后有其他 httpds 时,很难杀死我的 dev httpd procs。不能永远使用'killall'......

$ httpd -v
Server version: Apache/2.2.24 (Unix)

我应该注意到没有killproc安装 CentOS 6.4 minimum,所以我将我的 init.d 更改为使用

kill -9 `cat ${pidfile}`

反而。我猜 killproc 会搜索出子 PID 吗?所以我必须安装python来安装killproc只是为了使用httpd的init脚本?

4

1 回答 1

3

这里有两件事:

  • 您的单个 Apache 实例可能具有与其关联的多个 PID,具体取决于所选 MPM 的类型。但是,这不会影响您,因为您只需要终止写入 PID 文件的 PID,该进程将终止 Apache 实例的所有其余部分。

  • 如果您尝试并排运行多个 Apache 实例,则必须指定一个不同的 PID 文件,每个文件一个。然后您可以决定要杀死哪些实例 - 您必须处理每个选定实例的 PID 文件。将相同的 PID 文件提供给多个实例,并期望它们各自将自己的 PID 放入同一个文件中,这是行不通的。

于 2013-10-01T17:38:33.427 回答