How to run a command as a specific user in an init script?

bash, centos, init, linux, rhel

Solution

On RHEL systems, the `/etc/rc.d/init.d/functions` script is intended to provide similar to what you want. If you source that at the top of your init script, all of it's functions become available.

The specific function provided to help with this is `daemon`. If you are intending to use it to start a daemon-like program, a simple usage would be:

daemon --user=username command

If that is too heavy-handed for what you need, there is `runuser` (see `man runuser` for full info; some versions may need `-u` prior to the username):

/sbin/runuser username -s /bin/bash -c "command(s) to run as user username"

Problem

I'm writing an init script which is supposed to execute a single command as a user different than root. This is how I'm doing it currently: `sudo -u username command` This generally works as expected on Ubuntu/Debian, but on RHEL the script which is executed as the `command` hangs. Is there another way to run the command as another user? (Note that I can't use lsb init functions as they're not available on RHEL/Centos 5.x.)

Original source