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


25

我想在每次服务器启动时执行一个脚本。问题是我需要是某个用户才能执行脚本,如果我尝试以root身份执行该脚本,则找不到某些软件包(例如ruby)。

我尝试更改为xxx user01。

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

但是,这不起作用。


发布您的初始化脚本?
量子

你有一些日志吗?
Dom

为什么不简单地su在rc脚本中使用?
2012年

Answers:


29

sudo su user01在脚本中运行并不意味着会将以下命令发送到结果外壳程序。实际上,这可能意味着将生成一个新的shell,作为user01,它永远不会退出!

两件事情:

  • 您可以通过将-c 'command...'参数传递给su来像其他用户一样执行命令,例如su user01 -c '/etc/init.d/script start'
  • 从rc.local启动使用/etc/init.d的服务不是正确的选择。您想在启动时使用分发工具(例如chkconfig或)启用服务update-rc.d。您也不希望/etc/init.d中不应以开头的作业root。作业本身可以随意派生到另一个用户帐户,但应由root调用。

8

你可以放一些东西/etc/crontab然后运行@reboot

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

2
或在用户自己的crontab文件中。
杰克

4

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

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

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

-u指定运行的用户名


0

当然,由于sudoers中的requiretty(强制必须登录用户),因此无法使用sudo运行该脚本。您可能需要禁用,这有些冒险

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

高温超导

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.