优雅地重启 Lighttpd Web 服务器
如何在 Linux / UNIX 操作系统下正常重启我的 lighttpd+php fastcgi 网络服务器?
您需要向 lighttpd 进程发送一个 SIGINT 信号。它只会在客户端连接成功关闭后关闭服务器,而不会中断连接。这对于重新加载配置选项很有用。如果您使用的是 sysv 样式脚本,请确保 reload() 如下所示:
#!/bin/bash # only works under RHEL / Fedora / CentOS Linux source /etc/init.d/functions pidfile=/var/run/lighttpd.pid prog=lighttpd conf=/etc/lighttpd/lighttpd.conf lighttpd=/usr/sbin/lighttpd reload(){ echo -n $"Reloading $prog " killproc -p $pidfile $prog -INT start local RETVAL=$? echo return $RETVAL } start() { echo -n $"Starting $prog: " daemon $lighttpd -f $conf RETVAL=$? echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog return $RETVAL } stop() { echo -n $"Stopping $prog: " killproc $lighttpd RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog return $RETVAL } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; condrestart) if [ -f /var/lock/subsys/$prog ]; then stop start fi ;; reload) reload ;; status) status $lighttpd RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|restart|condrestart|reload|status}" RETVAL=1 esac exit $RETVAL
UNIX/Linux 的命令行选项
如果您没有 /init.d/ 或 /rc.d/ 样式脚本,请使用以下步骤。您可以从命令行本身发送 INT 单个并重新启动服务器:
您应该在 lighttpd 错误日志文件中看到以下内容:
# kill -INT $(cat /var/run/lighttpd.pid)
# lighttpd -f /etc/lighttpd.conf
2009-05-08 18:54:45: (server.c.1355) [note] graceful shutdown started 2009-05-08 18:54:45: (log.c.97) server started 2009-05-08 18:54:49: (server.c.1469) server stopped by UID = 0 PID = 957 2009-05-08 18:56:57: (log.c.97) server started
关于 php fastcgi 进程的说明
确保 php 套接字配置如下(如果没有以下配置,php 在优雅重启后将不会重新加载):
"socket" => "/tmp/php-cgi.socket" + var.PID
以下是 php5 fastcgi lighttpd.conf 配置的示例:
fastcgi.server = ( ".php" => (( "bin-path" => "/usr/bin/php-cgi", "socket" => "/tmp/php-cgi.socket"+ var.PID, "max-procs" => 1, "idle-timeout" => 30, "bin-environment" => ( "PHP_FCGI_CHILDREN" => "2", "PHP_FCGI_MAX_REQUESTS" => "2000" ), "bin-copy-environment" => ( "PATH", "SHELL", "USER" ), "broken-scriptfilename" => "enable" )) )
关于RHEL / CentOS Linux init.d脚本的说明
大多数现代 Linux 发行版都附带一个脚本来启动 / 停止 / 重新启动和重新加载 lighttpd:但是,你需要在RHEL / CentOS Linux
# /etc/init.d/lighttpd reload
下修补 /etc/init.d/lighttpd 。查找 reload():
reload() { echo -n $"Reloading $prog: " killproc $lighttpd -HUP RETVAL=$? echo return $RETVAL }
替换为:
reload() { echo -n $"Reloading $prog: " killproc $lighttpd -INT RETVAL=$? echo return $RETVAL }
Debian / Ubuntu Linux用户
如果您使用的是 Debian / Ubuntu Linux,请输入:
# /etc/init.d/lighttpd reload