| #!/sbin/openrc-run |
| # Copyright 1999-2017 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| extra_commands="configtest" |
| extra_started_commands="upgrade reload" |
| |
| description="Robust, small and high performance http and reverse proxy server" |
| description_configtest="Run nginx' internal config check." |
| description_upgrade="Upgrade the nginx binary without losing connections." |
| description_reload="Reload the nginx configuration without losing connections." |
| |
| NGINX_CONFIGFILE=${NGINX_CONFIGFILE:-/etc/nginx/nginx.conf} |
| |
| command="/usr/sbin/nginx" |
| command_args="-c \"${NGINX_CONFIGFILE}\"" |
| start_stop_daemon_args=${NGINX_SSDARGS:-"--wait 1000"} |
| pidfile=${NGINX_PIDFILE:-/run/nginx.pid} |
| user=${NGINX_USER:-nginx} |
| group=${NGINX_GROUP:-nginx} |
| retry=${NGINX_TERMTIMEOUT:-"TERM/60/KILL/5"} |
| |
| depend() { |
| need net |
| use dns logger netmount |
| } |
| |
| start_pre() { |
| if [ "${RC_CMD}" != "restart" ]; then |
| configtest || return 1 |
| fi |
| } |
| |
| stop_pre() { |
| if [ "${RC_CMD}" = "restart" ]; then |
| configtest || return 1 |
| fi |
| } |
| |
| stop_post() { |
| rm -f ${pidfile} |
| } |
| |
| reload() { |
| configtest || return 1 |
| ebegin "Refreshing nginx' configuration" |
| start-stop-daemon --signal SIGHUP --pidfile "${pidfile}" |
| eend $? "Failed to reload nginx" |
| } |
| |
| upgrade() { |
| configtest || return 1 |
| ebegin "Upgrading nginx" |
| |
| einfo "Sending USR2 to old binary" |
| start-stop-daemon --signal SIGUSR2 --pidfile "${pidfile}" |
| |
| einfo "Sleeping 3 seconds before pid-files checking" |
| sleep 3 |
| |
| if [ ! -f "${pidfile}.oldbin" ]; then |
| eerror "File with old pid not found" |
| return 1 |
| fi |
| |
| if [ ! -f "${pidfile}" ]; then |
| eerror "New binary failed to start" |
| return 1 |
| fi |
| |
| einfo "Sleeping 3 seconds before WINCH" |
| sleep 3 |
| # Cannot send "WINCH" using start-stop-daemon yet, https://bugs.gentoo.org/604986 |
| kill -WINCH $(cat "${pidfile}.oldbin") |
| |
| einfo "Sending QUIT to old binary" |
| start-stop-daemon --signal SIGQUIT --pidfile "${pidfile}.oldbin" |
| |
| einfo "Upgrade completed" |
| eend $? "Upgrade failed" |
| } |
| |
| configtest() { |
| ebegin "Checking nginx' configuration" |
| ${command} -c "${NGINX_CONFIGFILE}" -t -q |
| |
| if [ $? -ne 0 ]; then |
| ${command} -c "${NGINX_CONFIGFILE}" -t |
| fi |
| |
| eend $? "failed, please correct errors above" |
| } |