[packages/nginx] add upgrade target to initscript to gracefully upgrade binary

glen glen at pld-linux.org
Sun May 3 22:32:54 CEST 2015


commit 27d3b1951c3481d642d5269f685909c9e4911956
Author: Elan Ruusamäe <glen at delfi.ee>
Date:   Sun May 3 23:32:44 2015 +0300

    add upgrade target to initscript to gracefully upgrade binary

 nginx.init | 25 ++++++++++++++++++++++++-
 nginx.spec |  8 ++++----
 2 files changed, 28 insertions(+), 5 deletions(-)
---
diff --git a/nginx.spec b/nginx.spec
index d66d472..7a39ec6 100644
--- a/nginx.spec
+++ b/nginx.spec
@@ -473,7 +473,7 @@ for a in access.log error.log; do
 done
 /sbin/chkconfig --add %{name}-standard
 %systemd_post %{name}-standard.service
-%service %{name}-standard restart
+%service %{name}-standard force-reload
 echo 'NOTE: this nginx daemon is using "/etc/nginx/nginx-standard.conf" as config.'
 if ! [ -L /etc/systemd/system/nginx.service ] ; then
 	ln -s %{systemdunitdir}/%{name}-standard.service /etc/systemd/system/nginx.service || :
@@ -490,7 +490,7 @@ for a in access.log error.log; do
 done
 /sbin/chkconfig --add %{name}-light
 %systemd_post %{name}-light.service
-%service %{name}-light restart
+%service %{name}-light force-reload
 echo 'NOTE: this nginx daemon is using "/etc/nginx/nginx-light.conf" as config'
 
 %post perl
@@ -504,7 +504,7 @@ for a in access.log error.log; do
 done
 /sbin/chkconfig --add %{name}-perl
 %systemd_post %{name}-perl.service
-%service %{name}-perl restart
+%service %{name}-perl force-reload
 echo 'NOTE: this nginx daemon is using "/etc/nginx/nginx-perl.conf" as config'
 
 %post mail
@@ -518,7 +518,7 @@ for a in access.log error.log; do
 done
 /sbin/chkconfig --add %{name}-mail
 %systemd_post %{name}-mail.service
-%service %{name}-mail restart
+%service %{name}-mail force-reload
 echo 'NOTE: this nginx daemon is using "/etc/nginx/nginx-mail.conf" as config'
 
 %preun standard
diff --git a/nginx.init b/nginx.init
index ad6d1dc..16da7a9 100755
--- a/nginx.init
+++ b/nginx.init
@@ -123,6 +123,26 @@ condrestart() {
 	start
 }
 
+# Upgrade the binary with no downtime.
+# http://nginx.org/en/docs/control.html#upgrade
+# TODO: handle revert back on failed upgrade
+upgrade() {
+	local oldbin_pidfile="${pidfile}.oldbin"
+
+	checkconfig
+	show "Upgrading $svname"
+	killproc -p $pidfile $prog -USR2
+	RETVAL=$?
+	sleep 1
+	if [ -f $oldbin_pidfile ] && [ -f $pidfile ]; then
+		show "Upgrade: stopping old process"
+		killproc -p $oldbin_pidfile $prog -QUIT
+		return 0
+	else
+		return 1
+	fi
+}
+
 RETVAL=0
 # See how we were called.
 case "$1" in
@@ -140,9 +160,12 @@ case "$1" in
   try-restart)
 	condrestart 0
 	;;
-  reload|force-reload|graceful)
+  reload|graceful)
 	reload
 	;;
+  force-reload|upgrade) 
+	upgrade
+	;;
   checkconfig|configtest)
 	checkconfig 1
 	;;
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/nginx.git/commitdiff/27d3b1951c3481d642d5269f685909c9e4911956



More information about the pld-cvs-commit mailing list