не запускается файл пайтон в CRON
пытаюсь запускать файл python через cron в docker. Файл не запускается.
файл CRON
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# Наши задания
*/10 * * * * root /usr/local/bin/python3 /app/parser.py >> /app/logs/parser.log 2>&1
* * * * * root echo "Cron job running at $(date)" >> /app/logs/cron.log 2>&1n
Dockerfile
# Используем официальный образ Python
FROM python:3.10-slim
# Устанавливаем необходимые зависимости
RUN apt-get update && apt-get install -y cron
# Устанавливаем необходимые Python библиотеки
COPY requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir -r /app/requirements.txt
# Копируем код приложения
COPY . /app
# Устанавливаем рабочую директорию
WORKDIR /app
# Добавляем скрипт в cron
COPY crontab /etc/crontabs/root
RUN chmod 0644 /etc/crontabs/root
# Создаем директорию для логов
RUN mkdir -p /app/logs
# Запускаем cron
CMD ["cron", "-f"]
yaml
services:
db:
image: postgres:latest
environment:
POSTGRES_DB: coingecko_db
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
parser:
build:
context: .
dockerfile: Dockerfile
depends_on:
- db
environment:
DB_HOST: db
DB_NAME: coingecko_db
DB_USER: user
DB_PASSWORD: password
volumes:
- ./logs:/app/logs
volumes:
postgres_data:
файл не запускается каждые 10 минут, логи не появляются в app/logs Подскажите кто знает что делать в этом случае?
Ответы (1 шт):
Автор решения: Рус
→ Ссылка
лучше всего обернуть запуск в bash скрипт и уже через него запускать скрипт python. у меня сделано вот так, пути указаны для примера, поменяйте на свои
#!/bin/bash
# Настройка
SCRIPT_PATH="/home/path_to/parser.py"
LOG_FILE="/home/path_to/start.log"
TIMESTAMP=$(date +%Y-%m-%d_%H-%M-%S)
# Запуск скрипта с перенаправлением вывода в файл
echo "[$TIMESTAMP] Запуск скрипта..." >> "$LOG_FILE"
/usr/bin/python3 "$SCRIPT_PATH" >> "$LOG_FILE" 2>&1
RETURN_CODE=$? # Получаем код возврата скрипта
# Проверка кода возврата и логирование
if [ $RETURN_CODE -eq 0 ]; then
echo "[$TIMESTAMP] Скрипт успешно завершен." >> "$LOG_FILE"
else
echo "[$TIMESTAMP] ОШИБКА: Скрипт завершился с кодом $RETURN_CODE." >> "$LOG_FILE"
fi
echo "--------------------------------------------------" >> "$LOG_FILE"
а в cron'e так:
*/30 * * * * /home/path_to/start.sh
тут скрипт запуска выполняется раз в 30 минут.