Назад | Перейти на главную страницу

Постоянный способ выполнить команду для root при запуске системы в Mac OS

В Mac OS агент сборки моего CI-сервера работает от имени пользователя root. Я испортил рубиновую версию по умолчанию ruby -v сообщает о версии 2.0, а после eval "$(rbenv init -)" выполняется, я получаю желаемый 2.4.

Если бы я установил eval "$(rbenv init -)" для выполнения каждый раз, когда я вхожу в оболочку, я просто добавляю его в свой ~ / .bash_profile.

Но я предполагаю, что команды из bash_profile выполняются, когда я на самом деле использую ssh как пользователь. Как я могу убедиться, что команда ruby ​​corrector запускается при запуске системы для root?

Я не использую rbenv, но я понимаю, что этап инициализации изменяет среду текущей оболочки чтобы позволить rbenv управлять командами ruby ​​(например, путем добавления каталога rbenv shims в переменную среды PATH. Каждый процесс имеет свою собственную среду, поэтому выполняется rbenv init во время запуска системы повлияет только тот процесс, в котором он работал, а не всю систему.

Что вам нужно сделать, это запустить eval "$(rbenv init -)" для каждой новой оболочки, которой вы хотите управлять с помощью rbenv. Если вы хотите, чтобы задачи, выполняемые вашим CI-сервером, передавались нам через rbenv, это означает, что вам нужно добавить это в любой процесс инициализации, который используют эти задачи. Я предполагаю, что добавление eval "$(rbenv init -)" в ~ / .bash_profile и / или ~ / .bashrc учетной записи root, но, не зная точно, как работает сервер, я не могу сказать наверняка.

Вы можете использовать cron работа который запустит процесс сразу перезагрузка.

Запись в crontab root будет выглядеть примерно так:

@reboot       $HOME/bin/startup.sh

Использовать crontab -e чтобы добавить запись. Вы бы добавили свои рубиновые команды в свой startup.sh файл.

Бегать man 5 crontab для получения более подробной информации и опций.