32

I want to execute a script every time my server start up. The problem is that I need to be a certain user to execute the script, if I try to do it as root it cant find certain packages (such as ruby).

I try to change to xxx user01.

sudo su user01
/etc/init.d/script start

This doesn't work however.

Philip
  • 375
  • 1
  • 4
  • 8

4 Answers4

33

Running sudo su user01 in a script does not mean the following commands are sent to the resultant shell. In fact, it likely means a new shell is spawned as user01, which never exits!

Two things:

  • You can execute a command as another user either by passing the -c 'command...' argument to su, like su user01 -c '/etc/init.d/script start'.
  • Starting a service that uses /etc/init.d from rc.local isn't the correct thing to do. You want to use enable the service at startup using your distribution tools, like chkconfig or update-rc.d. You also don't want jobs in /etc/init.d that shouldn't be started as root. The jobs themselves can feel free to fork to another user account, but should be invoked by root.
Kyle Smith
  • 9,563
  • 1
  • 30
  • 32
9

You could put something in /etc/crontab and run it @reboot

@reboot username /etc/init.d/script start
user9517
  • 114,104
  • 20
  • 206
  • 289
8

You can just run the command through sudo like this:

sudo -H -u user01 /etc/init.d/script start

-H sets the HOME environment variable to that of the user

-u specifies the username to run as

joetek
  • 81
  • 1
  • 1
0

Surely you can't run that script with sudo because of requiretty ( enforces that users must be logged) in sudoers. You may want disable, which is somewhat risky

Also there is a somewhat old tool called runsuid: http://freecode.com/projects/runsuid

HTH

sebelk
  • 642
  • 3
  • 13
  • 32