Automatically re-start script as root
April 17th, 2008 by Mitch Frazier in
If you use sudo you can automatically re-start scripts that need to be run as root by adding a check at the beginning of the script and executing sudo if the script is not running as root:
if [[ $UID -ne 0 ]]; then
sudo -p 'Restarting as root, password: ' bash $0 "$@"
exit $?
fi
The inclusion of "bash" in the sudo command is to avoid problems if the script does not have its execute bit set. The "exit $?" causes the shell to exit with the status from the script instance that sudo runs.
__________________________Mitch Frazier is an Associate Editor for Linux Journal and the Web Editor for linuxjournal.com.
Special Magazine Offer -- Free Gift with Subscription
Receive a free digital copy of Linux Journal's System Administration Special Edition as well as instant online access to current and past issues. CLICK HERE for offer
Linux Journal: delivering readers the advice and inspiration they need to get the most out of their Linux systems since 1994.
Subscribe now!
The Latest
Newsletter
Tech Tip Videos
- Nov-19-09
- Nov-04-09
Recently Popular
From the Magazine
December 2009, #188
If last month's Infrastrucuture issue was too "big" for you then try on this month's Embedded issue. Find out how to use Player for programming mobile robots, build a humidity controller for your root cellar, find out how to reduce the boot time of your embedded system, and if you're new to embedded systems find out the basics that go into one. You can also read about the Beagle Board, the Mesh Potato and a spate of other interestingly named items. And along with our regular columns don't miss our new monthly column: Economy Size Geek.
Delicious
Digg
StumbleUpon
Reddit
Facebook








Thanks Mitch!
On April 18th, 2008 FredR says:
Ever have one of those moments where you read something and it acts as a catalyst to remind you of something else?
This article reminded me that I had a service, that no matter what, would run as root, and I wanted it to run as the "nobody" user. That service is MRTG (and it's actually an older version from 2003 I've been using for a while). It makes me nervous because the daemon will just stop after a while.
It comes out it wasn't parsing the command line options correctly (I had -user=nobody instead of --user=nobody) and I was putting the process in the background with the `&' symbol instead of the --daemon option.
My mrtg is now correctly, (after all these years), running as "nobody" again.
My experience is almost irrelevant because of the fact that, as a perl script there are conventions within it to force the daemon to be ran as a particular user, in the script itself.
__________________________-- FLR or flrichar is a superfan of Linux Journal, and goofs around in the LJ IRC Channel
Post new comment