在 Mac OS 中,在系统启动时执行 root 命令的永久方法

在 Mac OS 中,在系统启动时执行 root 命令的永久方法

在 Mac OS 上,我的 CI 服务器的构建代理以 root 身份运行。我弄乱了 ruby​​ 版本,默认情况下ruby -v报告版本 2.0,但在eval "$(rbenv init -)"执行后,我得到了想要的 2.4。

如果我要将其设置eval "$(rbenv init -)"为每次登录 shell 时执行,我只需将其添加到我的 ~/.bash_profile 中。

但我假设当我以用户身份实际 ssh 时,bash_profile 中的命令会执行。如何确保 ruby​​ 校正器命令在系统以 root 身份启动时执行?

答案1

您可以使用计划任务将运行一次进程重启

root 的 crontab 条目看起来如下所示:

@reboot       $HOME/bin/startup.sh

使用crontab -e添加条目。您需要将 ruby​​ 命令添加到文件中startup.sh

运行man 5 crontab以获取更多详细信息和选项。

答案2

我不使用 rbenv,但我的理解是 init 步骤会修改环境当前 shell 的允许 rbenv 控制 ruby​​ 命令(例如通过将 rbenv shims 目录添加到 PATH 环境变量中)。每个进程都有自己的环境,因此rbenv init在系统启动期间运行会影响只是它运行的那个过程,而不是整个系统。

您需要做的是eval "$(rbenv init -)"针对每个希望由 rbenv 管理的新 shell 运行。如果您希望 CI 服务器运行的任务使用 rbenv,则意味着您需要将其添加到这些任务使用的任何初始化过程中。我猜是将其添加eval "$(rbenv init -)"到 root 帐户的 ~/.bash_profile 和/或 ~/.bashrc,但由于不知道服务器的具体工作原理,我无法肯定地说。

相关内容