Я создаю веб-приложение, в котором инструкторы проводят курсы, а клиенты их покупают.
Мне нужна была автоматизация смены статусов курсов. В значительной степени просто проверка некоторых условий и, например. закрытие курса, когда текущее время больше, чем крайний срок.
Я использую php-symfony, все докеризовано. Итак, чтобы получить доступ к моему php-контейнеру, мне нужно запустить docker-compose и ввести docker-compose exec php bash. Что ж, в php у меня есть команда, которую я могу запустить вручную, чтобы проверить все статусы курсов и, возможно, внести некоторые изменения в базу данных, если условия соблюдены. Но для автоматизации этого процесса я решил использовать crontabs. Я проверил команду в cmd, есть ли у меня все права на это, и она сработала, поэтому я просто поместил ее в crontab для выполнения каждую минуту.
* * * * * cd /home/martin/PhpstormProjects/bp_project && sudo docker-compose exec php php bin/console courses-check >/dev/null 2>&1
Первая часть попадает в папку проекта, вторая часть открывает докер-контейнер и запускает команду проверки статусов курсов. В cmd вся команда работала. И даже в /var/журнал/системный журнал, который должен быть файлом журнала crontab по умолчанию, он дал мне этот вывод:
May 8 16:42:01 martin-ubuntu CRON[1032921]: (martin) CMD (cd /home/martin/PhpstormProjects/bp_project && sudo docker-compose exec php php bin/console courses-check >/dev/null 2>&1)
Я не вижу никаких видимых ошибок, но, глядя в базу данных, он не изменил никаких значений, хотя должен был.
Так что я подумал, что это может быть что-то с докером? Я попытался добавить вторую команду в crontab:
* * * * * cd /home && echo "hi" > a.txt
И он каждую минуту сохранял "привет" в заданный файл. Итак, хотя первая команда не работает, эта работает. Любые идеи, где скрытая проблема?






измените свой crontab на это
* * * * * sudo docker-compose -f /home/martin/PhpstormProjects/bp_project/docker-compose.yml run --rm php sh -c ' bin/console courses-check' >/dev/null 2>&1