ACC SHELL
Path : /etc/ |
|
Current File : //etc/initscript |
#
# initscript Executed by init(8) for every program it
# wants to spawn like this:
#
# /bin/sh /etc/initscript <id> <level> <action> <process>
#
# Set ulimits from sysconfig
# (c) garloff@suse.de, 1996, 2003, 2008
# License: Artistic
# Set umask to safe level, and set ulimits
umask 022
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH
unset HARGS SARGS SARGS2 RC
# Call with OPTION LIMIT BASE
# if BASE is not set, then LIMIT will be treated as absolute value,
# otherwise as percentage of BASE.
# Return value in RC
calc_limit()
{
local lim
unset RC
if test "$2" = "0" -o -z "$2"; then
return 1
else
if test "$2" = "unlimited" -o "${2:0:1}" = "@" -o -z "$3"; then
RC="-$1 ${2#@}"
else
lim=$((($3+99)/100*$2))
let lim-=$((lim%4))
RC="-$1 $lim"
fi
#echo "(\"$1\" \"$2\" \"$3\" -> \"$RC\""
return 0
fi
}
get_mem()
{
TOT=0; LOANEDTOT=0
# Get loaned memory if running CMO
if test -r /sys/devices/system/cmm/cmm0/loaned_kb; then
LOANEDTOT=`cat /sys/devices/system/cmm/cmm0/loaned_kb`
fi
if test -r /proc/meminfo; then
# Get memory & swap sizes to evaluate the percentages
MEMTOT=0; SWPTOT=0
while read tag num unit; do
case $tag in
MemTotal:)
MEMTOT=$num
;;
SwapTotal:)
SWPTOT=$num
;;
esac
done < /proc/meminfo
TOT=$(($MEMTOT+$SWPTOT+$LOANEDTOT))
fi
}
kern_ver()
{
unset NEW268LOCKLIMIT
case $(uname -r) in
2.[0-5].*|2.6.[0-7]|2.6.[0-7][.-]*)
;;
*)
NEW268LOCKLIMIT=1
;;
esac
}
if [ "$1" != "si" -a -r /etc/sysconfig/ulimit ]; then
. /etc/sysconfig/ulimit
# Max CPU time (not recommended)
calc_limit "Ht" "$HARDCPULIMIT" && HARGS="$RC"
calc_limit "St" "$SOFTCPULIMIT" && SARGS="$RC"
# File descriptors
calc_limit "Hn" "$HARDFDLIMIT" && HARGS="$HARGS $RC"
calc_limit "Sn" "$SOFTFDLIMIT" && SARGS="$SARGS $RC"
# Core files (0 makes sense here!)
test -z "$HARDCORELIMIT" || HARGS="$HARGS -Hc $HARDCORELIMIT"
test -z "$SOFTCORELIMIT" || SARGS="$SARGS -Sc $SOFTCORELIMIT"
# File sizes
calc_limit "Hf" "$HARDFILESIZELIMIT" && HARGS="$HARGS $RC"
calc_limit "Sf" "$SOFTFILESIZELIMIT" && SARGS="$SARGS $RC"
# User processes
calc_limit "Hu" "$HARDPROCESSLIMIT" && HARGS="$HARGS $RC"
calc_limit "Su" "$SOFTPROCESSLIMIT" && SARGS="$SARGS $RC"
# Apply
test -z "$SARGS" || ulimit $SARGS
test -z "$HARGS" || ulimit $HARGS
#test -z "$SARGS2" || ulimit $SARGS2
unset HARGS SARGS RC
# Memory dependent limits
get_mem
if test $TOT != 0; then
kern_ver
# SINGLE process limits to prevent a process from killing the machine
# by making it go OOM
# Maximum No more than VIRTUALLIMIT % of all virtual memory
calc_limit "Hv" "$HARDVIRTUALLIMIT" "$TOT" && HARGS="$HARGS $RC"
calc_limit "Sv" "$SOFTVIRTUALLIMIT" "$TOT" && SARGS="$SARGS $RC"
# Maximum resident size is $RESIDENTLIMIT % of physical RAM
calc_limit "Hm" "$HARDRESIDENTLIMIT" "$MEMTOT" && HARGS="$HARGS $RC"
calc_limit "Sm" "$SOFTRESIDENTLIMIT" "$MEMTOT" && SARGS="$SARGS $RC"
# Limit locked mem to $LOCKLIMIT % of phys RAM
calc_limit "Hl" "$HARDLOCKLIMIT" "$MEMTOT" && HARGS="$HARGS $RC"
if test -z "$NEW268LOCKLIMIT"; then
calc_limit "Sl" "$SOFTLOCKLIMIT" "$MEMTOT" && SARGS="$SARGS $RC"
else
calc_limit "Sl" "$SOFTLOCKLIMIT" "$MEMTOT" && SARGS2="$SARGS2 $RC"
fi
# Optional: Limit stack and data segment sizes ($STACKLIMIT, $DATALIMIT)
calc_limit "Hs" "$HARDSTACKLIMIT" "$MEMTOT" && HARGS="$HARGS $RC"
calc_limit "Ss" "$SOFTSTACKLIMIT" "$MEMTOT" && SARGS="$SARGS $RC"
calc_limit "Hd" "$HARDDATALIMIT" "$MEMTOT" && HARGS="$HARGS $RC"
calc_limit "Sd" "$SOFTDATALIMIT" "$MEMTOT" && SARGS="$SARGS $RC"
# Apply
test -z "$SARGS" || ulimit $SARGS
test -z "$HARGS" || ulimit $HARGS
test -z "$SARGS2" || ulimit $SARGS2
unset SARGS HARGS SARGS2 RC NEW268LOCKLIMIT
fi
unset TOT MEMTOT SWPTOT
fi
# cleanup environment
unset calc_limit get_mem kern_ver
# Execute the program.
eval exec "$4"
ACC SHELL 2018