我想在每次服务器启动时执行一个脚本。问题是我需要以特定用户身份执行该脚本,如果我尝试以 root 身份执行该脚本,则无法找到某些包(例如 ruby)。
我尝试换成xxx user01。
sudo su user01
/etc/init.d/script start
但这并不起作用。
答案1
在脚本中运行sudo su user01
并不意味着以下命令会被发送到结果 shell。事实上,这可能意味着会以 user01 的身份生成一个新的 shell,并且永远不会退出!
两件事情:
- 您可以通过将参数传递给 su 来以另一个用户的身份执行命令
-c 'command...'
,例如su user01 -c '/etc/init.d/script start'
。 - 从 rc.local 启动使用 /etc/init.d 的服务并不是正确的做法。您需要使用分发工具(如
chkconfig
或 )在启动时启用该服务update-rc.d
。您也不希望 /etc/init.d 中存在不应作为 启动的作业root
。这些作业本身可以自由地分叉到另一个用户帐户,但应由 root 调用。
答案2
您可以通过 sudo 运行该命令,如下所示:
sudo -H -u user01 /etc/init.d/script start
-H 将 HOME 环境变量设置为用户的
-u 指定要运行的用户名
答案3
你可以放一些东西进去/etc/crontab
然后运行它@reboot
@reboot username /etc/init.d/script start
答案4
当然,你不能用 sudo 运行该脚本,因为 sudoers 中的 requiretty(强制用户必须登录)。你可能需要禁用它,但这有点冒险
还有一个有点古老的工具叫做 runsuid:http://freecode.com/projects/runsuid
高血压