Задачи Cron не выполняются в Mac OSX

Фон

Мне всегда казалось, что этот вопрос является проблемой XY . Название подразумевает, что они хотят что-то из /root/.bashrc, но на самом деле вопрос заключается в том, что это псевдонимы из этого файла -, это, по широко распространенному мнению, невозможно из-за этого-Почему мой сценарий Bash не распознает псевдонимы? .

По сути, так задумано, что ваши псевдонимы не будут подхватываться в sudoи в других местах, потому что они не переносимы, и это также мое мнение о них.

Все, что находится в пользовательской среде, не должно предполагаться сценариями и любым программным обеспечением, которое может работать на данной машине. Но я понимаю, что есть сценарии, в которых могут быть некоторые псевдонимы в данной учетной записи пользователя $HOME/.bashrc, которые другие могут захотеть использовать в интерактивных сценариях.

С этой целью вы можете просто указать интерпретатору Bash расширять любые псевдонимы, которые он находит в процессе входа в систему, за пределами обычного поведения оболочки, с которым вы сталкиваетесь при использовании sudo.

Пример

Настройка

Для настройки я добавил следующие псевдонимы, переменные среды и функции в файлы /root/.bashrcи /root/.bash_profileмоего привилегированного пользователя.

$ grep smurf ~/.bashrc
alias brc_smurf='echo "ran alias from /root/.bashrc"'
export brc_smurf_env='var from /root/.bashrc'
bpf_smurf_func() { echo 'ran func from /root/.bash_profile'; }

$ grep smurf ~/.bash_profile
alias bpf_smurf='echo "ran alias from /root/.bash_profile"'
export bpf_smurf_env='var from /root/.bash_profile'
brc_smurf_func() { echo 'ran func from /root/.bashrc'; }

Ничего не делая ни в одной из этих работ (никаких сюрпризов):

$ sudo brc_smurf
sudo: brc_smurf: command not found

$ sudo bpf_smurf
sudo: bpf_smurf: command not found

Мы видим, что команда aliasне показывает псевдонимы при запуске вsudo:

$ sudo alias
$

Такое поведение является намеком на то, что псевдонимы не должны быть доступны. Но мы продолжаем...

Шаг #1 -видимые псевдонимы

Если мы запустим bash -ci, мы сможем заставить Bash хотя бы прочитать наш$HOME/.bashrc:

$ sudo bash -ci 'alias' | grep smurf
alias brc_smurf='echo "ran alias from /root/.bashrc"'

Круто, так что, может быть, мы можем запустить его?

$ sudo bash -ci 'alias; brc_smurf'
bash: alias; brc_smurf: No such file or directory

Шаг #2-shopt -s expand_aliases

Нет. Опять же, это по замыслу, мы делаем то, что не должны делать, поэтому есть ряд «предохранителей», которые мы должны отключить. другая «безопасность» — это Bash.

$ sudo bash -ci 'shopt -s expand_aliases; alias; brc_smurf'
alias brc_smurf='echo "ran alias from /root/.bashrc"'
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d.* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
ran alias from /root/.bashrc

Здесь мы можем увидеть наше сообщение от /root/.bashrc, мы успешно выполнили псевдоним пользователя root brc_smurf.

Шаг #3 -как насчет env vars?

Если вы используете показанный выше метод, теперь он также должен работать.

$ sudo bash -ci 'shopt -s expand_aliases; brc_smurf; echo $brc_smurf_env'
ran alias from /root/.bashrc
var from /root/.bashrc

Шаг #4 -как насчет функций?

Эти работы тоже ожидаемы:

$ sudo bash -ci 'shopt -s expand_aliases; brc_smurf; echo $brc_smurf_env;brc_smurf_func'
ran alias from /root/.bashrc
var from /root/.bashrc
ran func from /root/.bashrc

TLDR;

Вы можете сделать это, чтобы получить доступ к переменным среды + псевдонимам из/root/.bashrc:

$ sudo bash -ci 'shopt -s expand_aliases; '

Еда на вынос

Этот метод включает содержимое /root/.bashrc, но не получает содержимое /root/.bash_profile.

Ссылки

2
21.08.2020, 23:43
1 ответ

Задание cron должно выполняться каждый час через 5 минут после часа. Если вы хотите, чтобы он запускался каждые 5 минут, измените его на:

*/5 * * * *./check.sh
2
18.03.2021, 23:11

Теги

Похожие вопросы