Issue with cron django
I am trying implementing django crontab into my django project. Everything works fine except logging, in the docker container folder with logging does not exist.
My settings
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_crontab',
'core',
'crypto',
]
CRONJOBS = [
('* * * * *', 'crypto.management.commands.run_cron_job', '>> /var/log/cron.log 2>&1'),
]
Cron task
from django.core.management.base import BaseCommand
from django.utils.timezone import now
import logging
logging.basicConfig(filename="/var/log/cron.log", level=logging.INFO)
class Command(BaseCommand):
def handle(self, *args, **kwargs):
logging.info(f"Cron ran at {now()}")
self.stdout.write(f"Cron ran at {now()}")
Docker compose file
version: '3.8'
services:
db:
image: postgres
container_name:
postgres_server
ports:
- "5432:5432"
networks:
- local_network
volumes:
- db_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
pg_admin:
image: dpage/pgadmin4
environment:
PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL}
PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD}
networks:
- local_network
ports:
- "8080:80"
depends_on:
- db
web:
working_dir: /app
container_name:
app
image: python
ports:
- "8000:8000"
networks:
- local_network
command: >
bash -c "
apt-get update && apt-get install -y cron vim &&
mkdir -p /var/log &&
touch /var/log/cron.log &&
chmod 777 /var/log/cron.log &&
service cron start &&
pip install -r requirements_test.txt &&
pip install -r requirements_dev.txt &&
python manage.py makemigrations &&
python manage.py migrate &&
python manage.py crontab add &&
python manage.py createsuperuser --noinput &&
python manage.py runserver 0.0.0.0:8000"
volumes:
- ".:/app"
depends_on:
- db
volumes:
db_data:
networks:
local_network:
driver: bridge
As i mentioned cron works and it has task
docker-compose -f docker-compose_dev.yaml exec web python manage.py crontab show
Currently active jobs in crontab:
e36d0e6e2dc5d1a39d3a1cc3afa68f79 -> ('* * * * *', 'crypto.management.commands.run_cron_job', '>> /var/log/cron.log 2>&1')
docker-compose -f docker-compose_dev.yaml exec web ps aux | grep cron
root 834 0.0 0.0 3600 1848 ? Ss 20:02 0:00 /usr/sbin/cron
However when i am trying to see the logs it throws error that folder doesnt exist
docker-compose -f docker-compose_dev.yaml exec web tail -f /var/log/cron.log
tail: cannot open 'C:/Program Files/Git/var/log/cron.log' for reading: No such file or directory
tail: no files remaining
How do i fix it?
I was trying to make folder in the container but it failed also.
docker-compose -f docker-compose_dev.yaml exec web bash
mkdir -p /var/log/
touch /var/log/cron.log
chmod 777 /var/log/cron.log
mkdir: cannot create directory ‘/var’: Permission denied
touch: cannot touch '/var/log/cron.log': No such file or directory
chmod: cannot access '/var/log/cron.log': No such file or directory