Я использую всякий раз, когда
gem для генерировать команды cron. Я могу проверить эти команды с помощью crontab -l
. Сгенерированные команды:
24 15 * * * /bin/bash -l -c 'cd /Users/Chris/Sites/covid_tracker && RAILS_ENV=development bundle exec rake countries:temp --silent >> log/cron.log 2>&1'
24 15 * * * /bin/bash -l -c 'echo '\''should see this in the log'\'' >> log/cron.log 2>&1'
Первая команда (bundle exec rake) выполняется, и я вижу результат в cron.log. Однако я не вижу вывода для второй команды (echo) в cron.log.
Я хочу, чтобы команда echo (и другие команды bash, которые я хочу использовать) выполнялась в том же каталоге, что и пакет exec команда rake
,и разрешения должны быть такими же, как если бы я выполнил команду из этого каталога. Как мне это сделать?
Вы можете добавить префикс к команде с тем же префиксом cd /Users/Chris/Sites/covid_tracker &&
, что и перед первой командой. Это изменяет рабочий каталог на этот каталог перед запуском команды. Другой вариант — создать сценарий оболочки в этом каталоге и запустить его. Например:
24 15 * * * cd /Users/Chris/Sites/covid_tracker && ./runCron.sh >> log/cron.log 2>&1
runCron.sh:
#!/bin/bash -l
cd /Users/Chris/Sites/covid_tracker
RAILS_ENV=development bundle exec rake countries:temp --silent
echo "should see this in the log"
(Я не уверен, почему вы указали оболочку входа в систему с параметром -l, это необходимо для rake?)