Cygwin cron читает bash_profile, но не bashrc - PullRequest
0 голосов
/ 11 января 2020

Я пытаюсь запустить cronjob на моей машине Windows с Cygwin, которой нужен доступ к переменным окружения, которые я определил в моем ~ / .bashr c. Вот все разные вещи, которые я пытался получить для доступа к переменной env:

  1. Простой источник bashr c
PATH=/bin:/usr/bin:/usr/local/bin:$PATH
SHELL=/usr/bin/bash
*/1 * * * * source ~/.bashrc ; env | grep "MAP60" 
Вызов bash и запуск команды
PATH=/bin:/usr/bin:/usr/local/bin:$PATH
SHELL=/usr/bin/bash
*/1 * * * * /usr/bin/bash -c "source ~/.bashrc ; env | grep MAP60"
Попытка bash оболочки входа
PATH=/bin:/usr/bin:/usr/local/bin:$PATH
SHELL=/usr/bin/bash
 */1 * * * * /usr/bin/bash -lc " source ~/.bashrc ; env | grep MAP60"

Ничего из этого не работает, но случай 3 работает, если я добавлю переменную в мой ~ / .bash_profile. Я также попытался получить bashr c с полным путем, а также с помощью. вместо источника, чтобы вызвать файл. Я также попытался напрямую получить bash_profile, как в случае 1, но это тоже не работает. Я хотел бы, чтобы переменные вызывались в ~ / .bashr c вместо того, чтобы каждый раз вызывать оболочку входа в систему. Как я могу добиться этого с помощью Cygwin Cron?

1 Ответ

0 голосов
/ 11 января 2020

работает для меня (и всех остальных). Так что что-то не так с вашей настройкой. У меня нет установки cron на Cygwin, но одна вероятность, что он не может отправить вам вывод команды по электронной почте (что обычно используется по умолчанию для UNIX). Начните с изменения вашего третьего примера следующим образом:

*/1 * * * * /usr/bin/bash -xlc " source ~/.bashrc ; env | grep MAP60" >/tmp/x 2>&1

Затем проверьте содержимое / tmp / x .

Примечание: Bash только читает ~ /.bashrc для интерактивных оболочек. Использование -l не делает оболочку интерактивной. Помещать определения var в ~ / .bashr c не рекомендуется. Но если вы хотите сделать это, вы должны убедиться, что любая команда, которая должна выполняться, только если оболочка является интерактивной, находится внутри блока if [[ $- = *i* ]]; then ...; fi в вашем ~ / .bashr c.

...