Я пытался обновлять свою кодовую базу ежедневно, используя следующую команду 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 выполняет процесс проверки.
Первая строка должна устанавливать требуемую переменную окружения. Но этого не происходит.
Какую ошибку я допустил в этом? Спасибо заранее.
решение1
Каждая строка в вашем crontab представляет собой отдельную задачу, которая будет запланирована и выполнена независимо.
В вашем случае это означает, что они запускаются в разных сеансах оболочки, поэтому использование файла скрипта для установки некоторых переменных среды в одном задании не повлияет на среду, в которой позже будет выполняться другое задание.
Вам придется изменить свой процесс и запустить оба скрипта в одном сеансе оболочки, а значит, проще всего это сделать в одном задании cron.
Если вам нужна задержка между запусками, вы можете добиться этого, например, с помощью sleep
вместо того, чтобы планировать другую задачу с фиксированным более поздним временем.
О, и конечно, как указано в некоторых других комментариях и ответах, вы можете только исходные скрипты с , .
чтобы заставить их работать в текущей среде оболочки вместо подоболочки. Однако, cd
это не скрипт, а встроенная команда оболочки, которая всегда запускается в текущей среде оболочки, так что запись . cd somehwere
также является ошибкой.
решение2
Я полагаю, что проблема в .
предыдущем вашем cd
.
.
(псевдоним fro source
) позволяет вам указать источник файла. Это не работает для встроенных оболочек, таких как cd
, поскольку они не являются исполняемыми файлами, которые можно указать в источнике.
При объединении двух команд с помощью AND - &&
оболочка пропускает любую команду, следующую за командой, которая завершается ошибкой, поскольку они не изменят результирующее значение ( 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
Обновлять: Если скрипты зависимы (а я так думаю?), запустите все в одном сеансе. (Для выполнения каждой записи cron будет открыт новый сеанс bash)
27 15 * * * cd /home/covuser/user/ && . /home/covuser/user/conf.sh && . /home/covuser/user/checkout.sh