Как автоматизировать запуск выполнения файла по определенному расписанию?

Как настроить автозапуск скрипта на Python на сервере Ubuntu? Хочу заставить его работать постоянно, возможно ли это через контейнер? Буду благодарен за советы по реализации данной задачи.
  • 9 февраля 2024 г. 13:10
Ответы на вопрос 3
Для автоматизации выполнения файла по определенному расписанию можно использовать cron — демон-планировщик, который поставляется с большинством дистрибутивов Linux, включая Ubuntu. Чтобы настроить автозапуск скрипта на Python, выполните следующие шаги:

### Шаг 1: Редактирование crontab
Откройте crontab (расписание cron) для редактирования командой:

```bash
crontab -e
```

Если это ваш первый раз, система может предложить вам выбрать редактор (например, nano или vim).

### Шаг 2: Добавление задания в crontab
Добавьте строку в конец файла, определяющую ваши параметры запуска:

```
* * * * * /usr/bin/python3 /путь/к/вашему/скрипту.py
```

Структура расписания выглядит так: минута, час, день месяца, месяц, день недели, команда для выполнения. Например, чтобы запустить скрипт в 3 часа утра каждый день:

```
0 3 * * * /usr/bin/python3 /путь/к/вашему/скрипту.py
```

Сохраните файл и выйдите из редактора, это автоматически обновит cron.

### Шаг 3: Проверка расписания cron
Вы можете проверить, что ваше задание добавлено, выполнив команду:

```bash
crontab -l
```

### Запуск скрипта Python в контейнере с использованием Docker

Если вы хотите запустить ваш скрипт Python в изолированном контейнере, вы можете использовать Docker. Вам нужно:

1. Создать Dockerfile, который описывает сборку образа с Python и вашим скриптом.
2. Настроить контейнер с запланированным выполнением скрипта.

#### Dockerfile:

```Dockerfile
FROM python:3.9

# Установка cron
RUN apt-get update && apt-get -y install cron

# Копирование скрипта и файл cron в контейнер
COPY скрипт.py /скрипт.py
COPY скрипт-cron /etc/cron.d/скрипт-cron

# Предоставление прав на выполнение
RUN chmod 0644 /etc/cron.d/скрипт-cron
RUN chmod +x /скрипт.py

# Создание лог-файла для вывода работы скрипта (если требуется)
RUN touch /var/log/cron.log

# Запуск cron
CMD ["cron", "-f"]
```

#### Файл скрипт-cron:

```bash
* * * * * root /usr/local/bin/python /скрипт.py >> /var/log/cron.log 2>&1
# Пустая строка в конце файла обязательна!
```

Затем создайте образ и запустите контейнер командами:

```bash
docker build -t имя_образа .
docker run -d имя_образа
```

В контейнере cron будет запускать ваш Python скрипт согласно расписанию, указанному в файле `скрипт-cron`.

Обратите внимание, что эффективный запуск в контейнере может потребовать настройки окружения, например, установки зависимостей Python и настройки разрешений. 

Также важно заметить, что для надежного запуска и управления контейнерами в продакшене часто используют оркестраторы, как Kubernetes, который также позволяет настроить автоматический запуск задач по
systemd-timer . Нихт юзать крон в 2024.
есть стандартная системная служба cron 

в менеджере systemd есть более современный метод создать my_name.service и к нему запускалку по времени my_name.timer
статей мильен и для того и для того
пишем задание для cron
пишем свой timer для systemd
Похожие вопросы