#12: Restarting web server gracefully
After upgrading your web server you need to restart it, but how is this done correctly? Just killing the server would interrupt all connections and that could cause problems such as inconsistent data and angry users. So what we need to do is to restart the web server gracefully so that all connections being served can finish. Once all connections are closed, the server restarts.
This graceful restart is already implemented in many init scripts. For instance
/etc/init.d/apache2 gracefulto restart Apache gracefully or
/etc/init.d/lighttpd gracefulto restart Lighttpd. But this might not be available on all distributions. Therefore, we want to restart our server manually.
For graceful Apache restart we use apache2ctl, which is shipped alongside Apache. To restart, run
apache2ctl gracefulInstead of using apache2ctl, you might also send a signal (SIGUSR1) to the Apache parent process:
kill -USR1 `cat /var/run/apache2.pid`Apache also supports a graceful stop if you want to shut down the server instead of restarting it:
apache2ctl graceful-stopAs an alternative you may send the signal SIGWINCH. Note that the Apache manual still documents apachectl instead of apache2ctl, but you should go with apache2ctl as it has been renamed.
To do a manual graceful restart of Lighttpd, send the parent process a SIGINT and then restart.
kill -INT `cat /var/run/lighttpd.pid` ; \
lighttpd -f /etc/lighttpd/lighttpd.conf
Read more about graceful restart:
RT @reflinux: #Advent series "24 Short #Linux #Hints", day 12: Restarting #webserver #gracefully http://bit.ly/f6bJKH