start-stop-daemon: Add SSD_IONICELEVEL

This is the disk IO counterpart to SSD_NICELEVEL.
Modified by William Hubbs to add the variable to the start-stop-daemon
man page.

This fixes #69.
This commit is contained in:
Kenneth Lakin 2015-11-03 03:33:06 -08:00 committed by William Hubbs
parent b19d0a40d7
commit 94b98430cb
3 changed files with 20 additions and 1 deletions

View File

@ -117,6 +117,9 @@
# Some daemons are started and stopped via start-stop-daemon. # Some daemons are started and stopped via start-stop-daemon.
# We can set some things on a per service basis, like the nicelevel. # We can set some things on a per service basis, like the nicelevel.
#SSD_NICELEVEL="-19" #SSD_NICELEVEL="-19"
# Or the ionice level. The format is class[:data] , just like the
# --ionice start-stop-daemon parameter.
#SSD_IONICELEVEL="2:2"
# Pass ulimit parameters # Pass ulimit parameters
# If you are using bash in POSIX mode for your shell, note that the # If you are using bash in POSIX mode for your shell, note that the

View File

@ -153,6 +153,10 @@ The retry specification can be either a timeout in seconds or multiple
signal/timeout pairs (like SIGTERM/5). signal/timeout pairs (like SIGTERM/5).
.El .El
.Sh ENVIRONMENT .Sh ENVIRONMENT
.Va SSD_IONICELEVEL
can also set the IO scheduling priority of the daemon, but the command line
option takes precedence.
.Pp
.Va SSD_NICELEVEL .Va SSD_NICELEVEL
can also set the scheduling priority of the daemon, but the command line can also set the scheduling priority of the daemon, but the command line
option takes precedence. option takes precedence.

View File

@ -696,6 +696,17 @@ int main(int argc, char **argv)
if (sscanf(tmp, "%d", &nicelevel) != 1) if (sscanf(tmp, "%d", &nicelevel) != 1)
eerror("%s: invalid nice level `%s' (SSD_NICELEVEL)", eerror("%s: invalid nice level `%s' (SSD_NICELEVEL)",
applet, tmp); applet, tmp);
if ((tmp = getenv("SSD_IONICELEVEL"))) {
int n = sscanf(tmp, "%d:%d", &ionicec, &ioniced);
if (n != 1 && n != 2)
eerror("%s: invalid ionice level `%s' (SSD_IONICELEVEL)",
applet, tmp);
if (ionicec == 0)
ioniced = 0;
else if (ionicec == 3)
ioniced = 7;
ionicec <<= 13; /* class shift */
}
/* Get our user name and initial dir */ /* Get our user name and initial dir */
p = getenv("USER"); p = getenv("USER");
@ -1195,7 +1206,8 @@ int main(int argc, char **argv)
if ((strncmp(env->value, "RC_", 3) == 0 && if ((strncmp(env->value, "RC_", 3) == 0 &&
strncmp(env->value, "RC_SERVICE=", 10) != 0 && strncmp(env->value, "RC_SERVICE=", 10) != 0 &&
strncmp(env->value, "RC_SVCNAME=", 10) != 0) || strncmp(env->value, "RC_SVCNAME=", 10) != 0) ||
strncmp(env->value, "SSD_NICELEVEL=", 14) == 0) strncmp(env->value, "SSD_NICELEVEL=", 14) == 0 ||
strncmp(env->value, "SSD_IONICELEVEL=", 16) == 0)
{ {
p = strchr(env->value, '='); p = strchr(env->value, '=');
*p = '\0'; *p = '\0';