从 rc.local 作为用户而不是 root 执行脚本

Phi*_*lip 30 ubuntu startup-scripts rc.local

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

我尝试更改为 xxx user01。

sudo su user01
/etc/init.d/script start
Run Code Online (Sandbox Code Playgroud)

然而这行不通。

Kyl*_*ith 33

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 调用。


use*_*517 9

你可以放入一些东西/etc/crontab并运行它@reboot

@reboot username /etc/init.d/script start
Run Code Online (Sandbox Code Playgroud)

  • 或在用户自己的 crontab 文件中。 (2认同)

小智 8

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

sudo -H -u user01 /etc/init.d/script start
Run Code Online (Sandbox Code Playgroud)

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

-u 指定运行的用户名