initスクリプト内でdaemon起動する場合、大抵/etc/rc.d/init.d/functionsで定義されるdaemon関数を呼び出すようになっている。たとえばredisやhttpdだと以下のようになっている。

$ grep '^[^#].*daemon' /etc/init.d/redis
    daemon --user ${REDIS_USER-redis} "$exec $REDIS_CONFIG --daemonize yes --pidfile $pidfile"
$ grep '^[^#].*daemon' /etc/init.d/httpd
        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS

daemon関数を確認するとniceに関する記述がある。

$ grep NICE /etc/rc.d/init.d/functions
        # if they set NICELEVEL in /etc/sysconfig/foo, honor it
        [ -n "${NICELEVEL:-}" ] && nice="nice -n $NICELEVEL"

/etc/sysconfig/fooでNICELEVELをセットすればいいと書いてあるので、redisであれば/etc/sysconfig/redisに以下のように書けばよい。

NICELEVEL=-10

psで確認するとNIが-10になっていることがわかる。

$ sudo service redis restart
$ ps lax | { head -1; grep redi[s]; }
F   UID   PID  PPID PRI   NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
1   495 30527     1  15  -10 184432 19224 ep_pol S<sl ?        290:51 /usr/bin/redis-server *:6379
$ ps -U redis -l
F S   UID   PID  PPID  C PRI   NI ADDR SZ WCHAN  TTY          TIME CMD
1 S   495 30527     1  1  75  -10 - 46108 ep_pol ?        04:50:51 redis-server

稼働中でrestartできないのであれば、reniceを使う。

$ sudo renice -n -10 対象のPID

redisであれば次のように実行すれば、PIDを取得したうえでそのPIDに対してreniceしてくれる。

$ ps -o pid= -U redis | xargs -I% sudo renice -n -10 -p %