Сценарий Crontab на другом каталоге, не работающем

Я попытался обновить свою кодовую базу ежедневно с помощью следующей команды crontab. Но сам первый шаг не работа, когда я протестировал его.

27 15 * * * . cd /home/covuser/user/ && . /home/covuser/user/conf.sh
40 17 * * * . cd /home/covuser/user && . /home/covuser/user/checkout.sh

conf.sh содержит переменную среды, необходимую для создания контроля кода. файл checkout.sh делает процесс контроля.

Первая строка, как предполагается, устанавливает требуемую переменную среды. Но этого не происходит.

Какую ошибку сделали в этом?Заранее спасибо.

0
задан 14 June 2018 в 04:01

2 ответа

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

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

Вам придется изменить свой процесс и запустить оба сценария в одном сеансе оболочки и, следовательно, проще всего просто в одной и той же задаче cron.

Если вам нужна задержка между циклами, вы можете добиться этого, например, с sleep вместо планирования другой работы с фиксированным более поздним временем.


Да, и, конечно, как указано в некоторых других комментариях и ответах, вы можете использовать только исходные сценарии с помощью ., чтобы они запускались в текущей среде оболочки вместо подоболочки. Однако cd - это не сценарий, а встроенная команда оболочки, которая всегда выполняется в текущей среде оболочки, поэтому написание . cd somehwere также является ошибкой.

1
ответ дан 29 October 2019 в 03:00

Я полагаю, что проблема с . предыдущий Ваш cd.

. (псевдоним fro source) позволяет Вам получить файл. Это не работает на оболочку builtins, как cd, поскольку они не исполняемые файлы, которые могут быть получены.

Поскольку Вы связываете две команды с И - &&, оболочка пропускает любую команду после той, которая перестала работать, поскольку они не изменят получающееся значение результата (false && true == false). Вы могли заменить && с a ; если Вы желаете другого поведения.

Это должно работать:

27 15 * * * cd /home/covuser/user/ && . /home/covuser/user/conf.sh
40 17 * * * cd /home/covuser/user && . /home/covuser/user/checkout.sh

Обновление: Если сценарии зависят, (который они, я думаю?), выполняет все на одной единственной сессии. (Новая сессия удара будет открыта для выполнения каждой записи крона),

27 15 * * * cd /home/covuser/user/ && . /home/covuser/user/conf.sh && . /home/covuser/user/checkout.sh
0
ответ дан 29 October 2019 в 03:00

Другие вопросы по тегам:

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