root@lucid:/etc/apache2# diff -u apache2.conf.orig apache2.conf
--- apache2.conf.orig 2010-09-20 13:46:33.857868534 +0930
+++ apache2.conf 2010-09-20 13:47:22.377842204 +0930
@@ -63,7 +63,7 @@
# identification number when it starts.
# This needs to be set in /etc/apache2/envvars
#
-PidFile ${APACHE_PID_FILE}
+PidFile /var/run/apache2.pid
#
# Timeout: The number of seconds before receives and sends time out.
@@ -142,8 +142,8 @@
</IfModule>
# These need to be set in /etc/apache2/envvars
-User ${APACHE_RUN_USER}
-Group ${APACHE_RUN_GROUP}
+User www-data
+Group www-data
#
# AccessFileName: The name of the file to look for in each directory
然后,这是我的工作/etc/init/apache2.conf:
# apache2 - http server
#
# Apache is a web server that responds to HTTP and HTTPS requests.
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
description "apache2 http server"
start on runlevel [2345]
stop on runlevel [!2345]
pre-start script
mkdir -p /var/run/apache2 || true
install -d -o www-data /var/lock/apache2 || true
# ssl_scache shouldn't be here if we're just starting up.
# (this is bad if there are several apache2 instances running)
rm -f /var/run/apache2/*ssl_scache* || true
end script
# Give up if restart occurs 10 times in 30 seconds.
respawn limit 10 30
exec /usr/sbin/apache2 -D NO_DETACH
respawn
# apache2 - http server
#
# Apache is a web server that responds to HTTP and HTTPS requests.
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
description "apache2 http server"
start on runlevel [2345]
stop on runlevel [!2345]
pre-start script
mkdir -p /var/run/apache2 || true
install -d -o www-data /var/lock/apache2 || true
# ssl_scache shouldn't be here if we're just starting up.
# (this is bad if there are several apache2 instances running)
rm -f /var/run/apache2/*ssl_scache* || true
end script
limit cpu 300 300
env APACHE_RUN_USER=www-data
env APACHE_RUN_GROUP=www-data
env APACHE_PID_FILE=/var/run/apache2.pid
# Give up if restart occurs 10 times in 30 seconds.
respawn limit 10 30
exec /usr/sbin/apache2 -D NO_DETACH
respawn
呜呜!
我已经编写了自己的版本,该版本几乎可以正常工作-使用一些 conf 文件黑客攻击,并使用
-D NO_DETACH
.首先,我必须手动设置
User
,Group
和PidFile
in/etc/apache2/apache2.conf
,而不是让它们从/etc/apache2/envvars
. 我无法找到正确导出这些变量的方法(我尝试了两种方法env
并export
按照http://manpages.ubuntu.com/manpages/lucid/man5/init.5.html进行了尝试,但效果不佳)。然后,这是我的工作
/etc/init/apache2.conf
:我能做到
start|stop|status|reload apache2
并得到有意义的结果;如果我kill -9
是主 apache 进程,它会立即重新生成,并按预期在启动时启动和停止。所以我认为它工作得相当好。我尝试了一些我无法工作的事情。
-D NO_DETACH
,并结合:那无法启动服务。
/etc/apache2/envvars
来填充${APACHE_*}
变量:那无法启动,并产生了一个关于
apache2: bad user name ${APACHE_RUN_USER}
.尝试了控制台输出和控制台默认选项;在这一点上,我真的只是在尝试获取有意义的错误消息。好像没什么区别。
console output
这对于调试 apache 消息很有用:
exec /usr/sbin/apache2 -X -e debug -E /var/log/apache2/foo.log
这是另一个不修改失败的尝试
/etc/apache2/apache2.conf
:exec APACHE_RUN_USER=www-data APACHE_RUN_GROUP=www-data APACHE_PID_FILE=/var/run/apache2.pid /usr/sbin/apache2 -D NO_DETACH -e debug -E /var/log/apache2/foo.log
好吧,这个脚本对我有用:
我也遇到了这个问题,但是我使用了另一种方法。获取 env 变量的最简单方法是使用 source 命令并将其指向 apache envvars 文件,然后您可以使用 -D FOREGROUND 选项运行 apache
所以基本上你需要一个看起来像这样的脚本(我的在 /etc/apache2/apache2_foreground.sh ):
然后你让它可执行并将主管指向它的位置,你还需要使用停止信号 6
脚本中的前两行捕获脚本的进程组 ID,并设置一个陷阱,该陷阱在传递给进程的信号上运行 - 此陷阱使用运行所有 apache2 进程的父进程 ID 执行终止(脚本本身) - 用负 PID 杀死意味着也杀死该进程的所有子进程(所以在这种情况下是所有 apache2 进程),否则我无法让主管杀死 apache2 进程
使用停止信号 6,因为我找不到任何其他可以调用陷阱的信号,无法捕获 9,并且 2 和 3 不做任何事情(脚本没有被杀死)
之后它应该可以顺利运行,无需修改 apache2 配置
Scott James Remnant 关于这个话题的几篇文章,我希望能对你有所帮助:
哦,是的,通常答案是“写你自己的”,所以我相应的典型建议是查阅入门 - 新贵页面,然后……输入。
我希望比我更了解这个问题的人提出一个有效的新贵脚本。
我会使用类似于Ben Williams 的方法,但使用
-D FOREGROUND
而不是-D NO_DETACH
.