bin/129814: [patch] support of per script nice(1) value in periodic.conf(5)

Artem Naluzhnyy tut at nhamon.com.ua
Sun Dec 21 03:40:04 PST 2008


>Number:         129814
>Category:       bin
>Synopsis:       [patch] support of per script nice(1) value in periodic.conf(5)
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Sun Dec 21 11:40:03 UTC 2008
>Closed-Date:
>Last-Modified:
>Originator:     Artem Naluzhnyy
>Release:        7.1-PRERELEASE
>Organization:
>Environment:
>Description:
The patch adds support of per periodic(8) script nice(1) value the script will be run at. There are two features:

  * default_nice variable - default nice level
  * <basename>_<script>_nice variables - nice level for the specific script


Default behavior after the patch application is still the same - no nice level changes.


periodic.conf(5) example:

  default_nice=10
  daily_status_mail_rejects_enable="YES"
  daily_status_mail_rejects_nice=8
>How-To-Repeat:

>Fix:
--- usr.sbin/periodic/periodic.sh.orig	2007-06-22 13:04:05.000000000 +0300
+++ usr.sbin/periodic/periodic.sh	2008-12-21 12:06:09.000000000 +0200
@@ -78,7 +78,23 @@
                 then
                     output=TRUE
                     processed=$(($processed + 1))
-                    $file </dev/null >$tmp_output 2>&1
+
+                    _script=$(basename "$file")
+                    # trim three leading digits and dot if present
+                    # replace '-' with '_'
+                    _script=$(echo "${_script##[0-9][0-9][0-9].}" | tr - _)
+                    eval _nice=\$${arg##*/}_${_script}_nice
+                    if [ -n "${_nice}" ]
+                    then
+                        nice_cmd="nice -n ${_nice}"
+                    elif [ -n "${default_nice}" ]
+                    then
+                        nice_cmd="nice -n ${default_nice}"
+                    else
+                        nice_cmd=''
+                    fi
+
+                    $nice_cmd $file </dev/null >$tmp_output 2>&1
                     rc=$?
                     if [ -s $tmp_output ]
                     then
--- usr.sbin/periodic/periodic.8.orig	2007-09-08 00:54:45.000000000 +0300
+++ usr.sbin/periodic/periodic.8	2008-12-21 13:19:24.000000000 +0200
@@ -144,6 +144,18 @@
 If
 .Ao Ar basedir Ac Ns Va _output
 is not set or is empty, output is sent to standard output.
+.Pp
+If
+.Ao Ar basedir Ac Ns Va _ Ns Ao Ar script Ac Ns Va _nice
+variable is set, the script will be run at specified nice level. Otherwise
+nice level from
+.Va default_nice
+variable is used. Script name should be specified without three leading digits
+and dot, dashes in the script name should be replaced with underscores (e.g.
+.Pa daily_status_mail_rejects_nice
+variable for
+.Pa /etc/periodic/daily/460.status-mail-rejects
+script).
 .Sh ENVIRONMENT
 The
 .Nm
--- etc/defaults/periodic.conf.orig	2008-01-27 10:07:14.000000000 +0200
+++ etc/defaults/periodic.conf	2008-12-21 13:26:24.000000000 +0200
@@ -22,6 +22,9 @@
 # periodic script dirs
 local_periodic="/usr/local/etc/periodic"
 
+# default nice level all periodic scripts will be run at
+default_nice=""
+
 
 # Daily options
 


>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list