cron запускает команды оболочки из crontabs.
Но, только что обнаружив различия между zsh и bash, я обеспокоен тем, что не знаю, какую оболочку cron использует для интерпретации команд crontab? Очевидно, что простой случай, когда запись cron просто указывает на файл сценария, обрабатывается #!/path/to/interpreter
в первой строке, а что, если в cron что-то посложнее?
Я заглянул в /etc/cron*
и не видите ничего, что могло бы позволить это установить или изменить?
В crontab (5) manpage обрабатывает ваш запрос по умолчанию /bin/sh
Некоторые переменные среды устанавливаются автоматически демоном cron (8). SHELL установлен в / bin / sh, а LOGNAME и HOME устанавливаются из строки / etc / passwd владельца crontab. HOME и SHELL могут быть отменены настройками в crontab; LOGNAME не может.
так что добавление
SHELL=/bin/bash
в файл crontab соответственно изменит оболочку.
Вы можете поставить SHELL=/bin/bash
в твоем crontab
- вы также можете указать .bashrc
с помощью BASH_ENV="/root/.bashrc"
. Это должно вас подтолкнуть. На самом деле я не знаю, что произойдет, если у вас нет SHELL
определен, но добавлен в crontab
позволяет легко понять, что к чему.