次の起動スクリプトは、/etc/init.d/init.srm としてシステムに添付されています。このスクリプトは、システムが実行レベル 2 または 3 (マルチユーザーモード) に移行するときに引数 start で実行されます。さらに、システムの停止時にも引数 stop で実行されます。
#!/bin/sh # # Copyright (c) 1998-1999 by Sun Microsystems, Inc. # All rights reserved. # # Copyright 1995-1997 Softway Pty. Ltd. # # Start/stop Solaris Resource Manager v1.1 # #ident "@(#)init.srm 1.24 99/02/10 SMI" ####################################################################### # Default values. DATADIR=/var/srm ShareDb=$DATADIR/srmDB LimdaemonOptions= ChargeOptionsOn="limits=y:share=y:adjgroups=y:limshare=y" ChargeOptionsOff="limits=n:share=n:adjgroups=n:limshare=n" DaemonLnode=daemon LostLnode=srmlost IdleLnode=srmidle OtherLnode=srmother ####################################################################### # ECHO=echo # For a verbose startup and shutdown ECHO=: # For a quiet startup and shutdown SRMDIR=/usr/srm SRMBIN=$SRMDIR/bin SRMSBIN=$SRMDIR/sbin SRMLIB=$SRMDIR/lib ETCSRM=/etc/srm PATH=/sbin:/usr/sbin:/bin:$PATH:$SRMSBIN:$SRMBIN:$SRMLIB export PATH case "$1" in 'start') if [ ! -x $SRMSBIN/srmadm ]; then echo "Solaris Resource Manager *not* installed." ¥ "Missing srmadm command." exit fi # Only bother if sched/SHR is loaded. if [ `$SRMSBIN/srmadm` != yes ] then # # Usually this is because /etc/system doesn't have the usual # set initclass="SHR" # or at least a set extraclass="SHR" # echo "Solaris Resource Manager *not* loaded." exit else echo "Enabling Solaris Resource Manager" if [ `$SRMSBIN/srmadm show fileopen` = yes ]; then echo "SRM database file already open - stopping first." limdaemon -k sleep 2 srmadm set $ChargeOptionsOff sync srmadm set fileopen=n $ECHO "SRM inactive" fi $ECHO "Starting SRM..." fi # Check the limconf file. if [ ! -s $ETCSRM/limconf ]; then echo "SRM - file $ETCSRM/limconf is missing " >&2 echo "SRM not started." exit 1 fi if [ ! -f "$ShareDb" ]; then echo "SRM database '$ShareDb' not present - " ¥ "creating empty database" if [ ! -d "$DATADIR" ]; then mkdir "$DATADIR" chmod 400 "$DATADIR" chown root "$DATADIR" chgrp root "$DATADIR" fi touch "$ShareDb" || { echo "Failed to create '$ShareDb'" >&2 echo "SRM not started" exit 1 } chmod 400 "$ShareDb" chown root "$ShareDb" chgrp root "$ShareDb" fi CreateLnodes=0 if [ ! -s "$ShareDb" ]; then $ECHO "SRM Warning: Using empty database" >&2 CreateLnodes=1 fi $ECHO "SRM starting ... ¥c" # Open Lnode file. srmadm set -f "$ShareDb" fileopen=y if [ $? != 0 ]; then echo echo "srmadm set -f $ShareDb failed" >&2 echo "SRM not started" exit 1 fi # Set SRM global options. srmadm set $ChargeOptionsOn if [ $? != 0 ]; then echo echo "srmadm set $ChargeOptionsOn failed" >&2 echo "SRM not completely enabled" exit 1 fi # Create if needed the daemon lnode. liminfo "$DaemonLnode" 2>/dev/null | ¥ grep "^Login name: *$DaemonLnode " >/dev/null 2>&1 if [ $? -ne 0 ]; then # If daemon lnode does not, create one. limadm set cpu.shares=1 "$DaemonLnode" 2>/dev/null limadm set sgroup=root "$DaemonLnode" 2>/dev/null fi # Create if needed the other lnode. liminfo "$OtherLnode" 2>/dev/null | ¥ grep "^Login name: *$OtherLnode " >/dev/null 2>&1 if [ $? -ne 0 ]; then # If "other" sgroup exists but has no lnode, create one. limadm set cpu.shares=1 "$OtherLnode" 2>/dev/null limadm set sgroup=root "$OtherLnode" 2>/dev/null fi # Create if needed, and set the lost lnode. if [ x"$LostLnode" != x ]; then liminfo "$LostLnode" 2>/dev/null | ¥ grep "^Login name: *$LostLnode " >/dev/null 2>&1 if [ $? -ne 0 ]; then limadm set cpu.shares=1 "$LostLnode" limadm set sgroup=root "$LostLnode" fi srmadm set lost="$LostLnode" || $ECHO "SRM - Warning: No user '$LostLnode' for lost lnode" fi # Create if needed, and set the idle lnode. if [ x"$IdleLnode" != x ]; then liminfo "$IdleLnode" 2>/dev/null | ¥ grep "^Login name: *$IdleLnode " >/dev/null 2>&1 if [ $? -ne 0 ]; then limadm set cpu.shares=0 "$IdleLnode" limadm set sgroup=root "$IdleLnode" fi srmadm set idle="$IdleLnode" || $ECHO "SRM - Warning: No user '$IdleLnode' for idle lnode" fi # If creating SRM database, set up existing users. if [ "$CreateLnodes" -eq 1 ]; then echo "SRM - creating user lnodes; may take a while" # We now want to catch any other users which were not found # on the filesystems. First we need to decide what the maximum # uid value we will create an l-node entry for in the database. # We choose less than the uid for 'nobody' so that we can try # and minimise the apparent size of the database (which is a sparse # file). If the user 'nobody' does not exist then we just have # to take our chances with using all possible uid values. # Unfortunately all this means that there are certain circumstances # where not all users will be taken into account. MaxUID=`awk -F: "¥¥$1==¥"nobody¥" { print ¥¥$3 - 100 }" /etc/passwd` if [ $? -eq 0 -a x"$MaxUID" != x ] ; then Cond="uid >= 0 && uid < $MaxUID && !flag.real" else Cond="uid >= 0 && !flag.real" fi UIDS=`limreport "$Cond" '%d¥n' uid | wc -l` if [ $UIDS -gt 0 ]; then $ECHO "$UIDS other lnodes to be created" ¥ "due to passwd entries" CMDS="limadm set cpu.shares=1:sgroup=$OtherLnode" limreport "$Cond" "$CMDS %d¥necho ' uid %7d¥r¥c'¥n" ¥ uid uid | sh echo fi fi limdaemon $LimdaemonOptions echo "Solaris Resource Manager Enabled." ;; 'stop') # SRM shutdown should be done as late as possible before # filesystems are unmounted. if [ -x $SRMSBIN/srmadm ] && $SRMSBIN/srmadm show fileopen > /dev/null then limdaemon -k sleep 2 srmadm set $ChargeOptionsOff srmadm set fileopen=n sync $ECHO "Solaris Resource Manager Disabled" fi ;; *) echo "Usage: $0 {start|stop}" ;; esac
このスクリプトは、デフォルトのスケジューリンググループ (そのユーザーがパスワードマップにある場合は other、それ以外は root) に l ノードを作成し、新しい l ノードをスケジューリング階層の適切な場所に移すことを促すメッセージをシステム管理者にメールで送信します。
#!/bin/sh # #ident "@(#)nolnode.sh 1.10 99/05/07 SMI" # # Copyright (c) 1998-1999 by Sun Microsystems, Inc. # All rights reserved. # # Copyright 1995-1997 Softway Pty. Ltd. # # A script that called by the PAM module to create a lnode # PATH=/usr/srm/sbin:/usr/srm/bin:/sbin:/bin export PATH LOCALE=C export LOCALE if [ "$DEBUG" = "true" ] then exec >> /tmp/nolnodelog 2>&1 echo date echo "Attempting to create lnode for $USER" else exec > /dev/null 2>&1 fi err=`limadm set -u cpu.shares=1 "$UID" 2>&1` if [ $? -eq 0 ] then SRM_GROUP=`liminfo -v $USER | grep '^sgroupname' | awk '{ print $2 }'` SRM_SHARE=`liminfo -v $USER | grep '^cpu.shares' | awk '{ print $2 }'` export SRM_GROUP SRM_SHARE cat <<-EOF | /usr/lib/sendmail root Subject: New lnode created for "$USER" Remember to change scheduling group and shares for "$USER". Currently in group "$SRM_GROUP" with $SRM_SHARE share. EOF else cat <<-EOF | /usr/lib/sendmail root Subject: Could not create lnode for "$USER" after "$SERVICE" attempt on tty "$TTY", uid "$UID", rhost "$RHOST", limadm said "$err" EOF exit 1 # deny access fi # permit access exit 0