Я использую docker контейнер , и я хочу сделать periodi c сканирование и обновление Django моделей.
Поэтому я решил сделать команду django и запускайте его периодически Linux crontab.
Cronjob list
* * * * * . /root/.profile; /usr/local/bin/python3 /code/manage.py crawl_snu >> /var/log/cron.log 2>&1
# crawl_snu is a command name
Но возникает ошибка
Traceback (most recent call last):
File "/code/manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 371, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 365, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 204, in fetch_command
settings.INSTALLED_APPS
File "/usr/local/lib/python3.7/site-packages/django/conf/__init__.py", line 56, in __getattr__
self._setup(name)
File "/usr/local/lib/python3.7/site-packages/django/conf/__init__.py", line 43, in _setup
self._wrapped = Settings(settings_module)
File "/usr/local/lib/python3.7/site-packages/django/conf/__init__.py", line 125, in __init__
raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
SECRET_KEY
находится в переменной окружения, поэтому я использую его как показано ниже
# settings.py
# ...
SECRET_KEY = os.environ.get('SECRET_KEY')
# ...
Я пытался передать переменную среды, добавив . /root/.profile/
перед выполнением команды, но она не работает.
Существует много переменных среды, кроме SECRET_KEY
, и они передаются хостом через docker run --env .env imagename
.
Это может быть проблема, связанная с Docker crontab ... Как я могу поделиться переменными окружения с crontab, или есть какие-то лучшие решения для периодического выполнения django команда с docker?