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


我希望每次服务器启动时都执行一个脚本。问题是我需要成为某个用户来执行脚本,如果我尝试以root身份执行它无法找到某些包(例如ruby)。

我尝试更改为xxx user01。

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

但是,这不起作用。


21
2017-08-30 16:04




发布你的初始化脚本? - quanta
你有一些日志吗? - Dom
你为什么不简单地使用 su 在rc脚本中? - Mat
看到 stackoverflow.com/questions/8940771/...。 - Ferdinand Prantl


答案:


运行 sudo su user01 在脚本中并不意味着将以下命令发送到结果shell。事实上,它可能意味着一个新的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调用。

26
2017-08-30 16:08





你可以把东西放进去 /etc/crontab 并运行它 @reboot

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

8
2017-08-30 16:08



或者在用户自己的crontab文件中。 - Jake


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

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

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

-u指定要运行的用户名


2
2017-08-11 12:24





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

还有一个名为runsuid的旧工具: http://freecode.com/projects/runsuid

HTH


0
2017-08-30 16:23