以用户身份从rc.local执行脚本,而不是root

我想在每次服务器启动时执行一个脚本。 问题是我需要成为一个特定的用户来执行脚本,如果我试图做它作为根无法find某些软件包(如ruby)。

我尝试更改为xxx user01。

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

但是这不起作用。

在脚本中运行sudo su user01并不意味着将下列命令发送到生成的shell。 事实上,这可能意味着一个新的shell被产生为user01,它永远不会退出!

两件事情:

  • 您可以通过将-c 'command...'parameter passing给su来执行另一个用户-c 'command...' ,如su user01 -c '/etc/init.d/script start'
  • 从rc.local启动使用/etc/init.d的服务不是正确的事情。 您希望在启动时使用您的分发工具启用服务,如chkconfigupdate-rc.d 。 你也不希望/etc/init.d中的作业不应该以root身份启动。 作业本身可以随意分叉到另一个用户帐户,但应该由root调用。

你可以把一些东西放在/etc/crontab运行@reboot

 @reboot username /etc/init.d/script start 

你可以像这样通过sudo运行命令:

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

-H将HOME环境variables设置为用户的环境variables

-u指定运行的用户名

当然,你不能用sudo运行这个脚本,因为requiretty(强制用户必须logging)在sudoers中。 你可能想禁用,这有点冒险

还有一个叫做runsuid的有点旧的工具: http ://freecode.com/projects/runsuid

HTH