#!/bin/sh unset _NGX_WORKER_PROCESSES _NGX_WORKER_PRIORITY _NGX_WORKER_RLIMIT_NOFILE _NGX_WORKER_CONNECTIONS ## here should be SANE defaults (!) _NGX_WORKER_PROCESSES=2 _NGX_WORKER_PRIORITY=0 _NGX_WORKER_RLIMIT_NOFILE=16384 _NGX_WORKER_CONNECTIONS=4096 [ -n "${NGX_WORKER_PROCESSES:-}" ] || NGX_WORKER_PROCESSES=${_NGX_WORKER_PROCESSES} case "${NGX_WORKER_PROCESSES}" in "${_NGX_WORKER_PROCESSES}" ) ;; ## allow values within [1;999] [1-9] | [1-9][0-9] | [1-9][0-9][0-9] ) ;; [Aa][Uu][Tt][Oo] ) ## adjust NGX_WORKER_PROCESSES=auto log_always "NGX_WORKER_PROCESSES: \"auto\" isn't supported by container yet" log_always "offloading decision to Angie (this could be a problem!)" ;; 0 ) log_always "NGX_WORKER_PROCESSES: \"0\" isn't supported by container yet" log_always "setting NGX_WORKER_PROCESSES=${_NGX_WORKER_PROCESSES}" NGX_WORKER_PROCESSES=${_NGX_WORKER_PROCESSES} ;; * ) log_always "NGX_WORKER_PROCESSES: unrecognized value: ${NGX_WORKER_PROCESSES}" log_always "setting NGX_WORKER_PROCESSES=${_NGX_WORKER_PROCESSES}" NGX_WORKER_PROCESSES=${_NGX_WORKER_PROCESSES} ;; esac [ -n "${NGX_WORKER_PRIORITY:-}" ] || NGX_WORKER_PRIORITY=${_NGX_WORKER_PRIORITY} case "${NGX_WORKER_PRIORITY}" in "${_NGX_WORKER_PRIORITY}" ) ;; -[1-9] | -1[0-9] | -20 ) ;; [0-9] | 1[0-9] | 20 ) ;; -0 ) log_always "NGX_WORKER_PRIORITY: likely an error: '-0'" log_always "adjusting NGX_WORKER_PRIORITY=0" NGX_WORKER_PRIORITY=0 ;; * ) log_always "NGX_WORKER_PRIORITY: unrecognized value: ${NGX_WORKER_PRIORITY}" log_always "setting NGX_WORKER_PRIORITY=${_NGX_WORKER_PRIORITY}" NGX_WORKER_PRIORITY=${_NGX_WORKER_PRIORITY} ;; esac [ -n "${NGX_WORKER_RLIMIT_NOFILE:-}" ] || NGX_WORKER_RLIMIT_NOFILE=${_NGX_WORKER_RLIMIT_NOFILE} case "${NGX_WORKER_RLIMIT_NOFILE}" in "${_NGX_WORKER_RLIMIT_NOFILE}" ) ;; [0-9] | [1-9][0-9] ) log_always "NGX_WORKER_RLIMIT_NOFILE: too low: ${NGX_WORKER_RLIMIT_NOFILE}" log_always "setting NGX_WORKER_RLIMIT_NOFILE=${_NGX_WORKER_RLIMIT_NOFILE}" NGX_WORKER_RLIMIT_NOFILE=${_NGX_WORKER_RLIMIT_NOFILE} ;; ## allow values within [100;9999999] [1-9][0-9][0-9] ) ;; [1-9][0-9][0-9][0-9] ) ;; [1-9][0-9][0-9][0-9][0-9] ) ;; [1-9][0-9][0-9][0-9][0-9][0-9] ) ;; [1-9][0-9][0-9][0-9][0-9][0-9][0-9] ) ;; * ) log_always "NGX_WORKER_RLIMIT_NOFILE: unrecognized value: ${NGX_WORKER_RLIMIT_NOFILE}" log_always "setting NGX_WORKER_RLIMIT_NOFILE=${_NGX_WORKER_RLIMIT_NOFILE}" NGX_WORKER_RLIMIT_NOFILE=${_NGX_WORKER_RLIMIT_NOFILE} ;; esac [ -n "${NGX_WORKER_CONNECTIONS:-}" ] || NGX_WORKER_CONNECTIONS=${_NGX_WORKER_CONNECTIONS} case "${NGX_WORKER_CONNECTIONS}" in "${_NGX_WORKER_CONNECTIONS}" ) ;; [0-9] | [1-9][0-9] ) log_always "NGX_WORKER_CONNECTIONS: too low: ${NGX_WORKER_CONNECTIONS}" log_always "setting NGX_WORKER_CONNECTIONS=${_NGX_WORKER_CONNECTIONS}" NGX_WORKER_CONNECTIONS=${_NGX_WORKER_CONNECTIONS} ;; ## allow values within [100;9999999] [1-9][0-9][0-9] ) ;; [1-9][0-9][0-9][0-9] ) ;; [1-9][0-9][0-9][0-9][0-9] ) ;; [1-9][0-9][0-9][0-9][0-9][0-9] ) ;; [1-9][0-9][0-9][0-9][0-9][0-9][0-9] ) ;; * ) log_always "NGX_WORKER_CONNECTIONS: unrecognized value: ${NGX_WORKER_CONNECTIONS}" log_always "setting NGX_WORKER_CONNECTIONS=${_NGX_WORKER_CONNECTIONS}" NGX_WORKER_CONNECTIONS=${_NGX_WORKER_CONNECTIONS} ;; esac nofile_soft=$(ulimit -Sn) nofile_hard=$(ulimit -Hn) if [ "${nofile_hard}" = unlimited ] ; then ## minor hack (if applicable) :) nofile_hard=$((NGX_WORKER_RLIMIT_NOFILE * 2)) fi nofile_ok=0 while : ; do [ ${nofile_hard} -ge ${NGX_WORKER_RLIMIT_NOFILE} ] || break [ ${nofile_soft} -ge ${NGX_WORKER_RLIMIT_NOFILE} ] || break nofile_ok=1 break ; done if [ ${nofile_ok} = 0 ] ; then log_always "adjusting 'nofile' limits" log_always "Limits before:" sed -En '1p;/open files/p' < /proc/$$/limits >&2 if [ ${nofile_hard} -lt ${NGX_WORKER_RLIMIT_NOFILE} ] ; then ulimit -Hn "${NGX_WORKER_RLIMIT_NOFILE}" nofile_hard=$(ulimit -Hn) fi if [ ${nofile_hard} -lt ${NGX_WORKER_RLIMIT_NOFILE} ] ; then log_always "lowering NGX_WORKER_RLIMIT_NOFILE to ${nofile_hard} due to hard limit" NGX_WORKER_RLIMIT_NOFILE=${nofile_hard} fi if [ ${nofile_soft} -lt ${NGX_WORKER_RLIMIT_NOFILE} ] ; then ulimit -Sn "${NGX_WORKER_RLIMIT_NOFILE}" fi log_always "Limits after:" sed -En '1p;/open files/p' < /proc/$$/limits >&2 fi unset nofile_soft nofile_hard nofile_ok export NGX_WORKER_PROCESSES NGX_WORKER_PRIORITY NGX_WORKER_RLIMIT_NOFILE NGX_WORKER_CONNECTIONS unset _NGX_WORKER_PROCESSES _NGX_WORKER_PRIORITY _NGX_WORKER_RLIMIT_NOFILE _NGX_WORKER_CONNECTIONS if [ ${NGX_WORKER_RLIMIT_NOFILE} -lt ${NGX_WORKER_CONNECTIONS} ] ; then log_always "WARNING: NGX_WORKER_RLIMIT_NOFILE is less than NGX_WORKER_CONNECTIONS (${NGX_WORKER_RLIMIT_NOFILE} < ${NGX_WORKER_CONNECTIONS})" else ratio=$(mawk -v "a=${NGX_WORKER_RLIMIT_NOFILE}" -v "b=${NGX_WORKER_CONNECTIONS}" 'BEGIN{print a/b;exit;}'