Добавить в корзинуПозвонить
Найти в Дзене

Как я воевал с cron и почему надо записывать всё подряд

Я хотел настроить в ISPmanager запуск Python-скрипта load_apartments.py каждую ночь в 01:00. Простая задача, да? В консоли скрипт пел и плясал, в ISPmanager с ручным запуском — тоже. Но в штатном режиме cron выдал: "Ошибка! Таблица users не найдена!" И началась моя эпопея. Ошибка была в том, что cron не знал, где искать database.db. В консоли я сидел в /root/rent_bot/, и всё было ок. В ISPmanager при ручном запуске я задавал каталог, и тоже ок. А в автоматическом режиме — хаос! Нужна была команда, которая сама знает свой дом. И вот она, звезда шоу: /bin/bash -c "(cd /root/rent_bot && source /root/rent_bot/myenv/bin/activate && python3 /root/rent_bot/load_apartments.py >> /root/rent_bot/cron.log 2>&1)" Почему я так долго мучился? Потому что не записал старую команду! Документирование — как запасной парашют. Вот почему оно важно: Теперь я веду файл cron_tricks.txt и клянусь записывать каждую мелочь. Даже если кажется, что "это же просто"! 😄 подробнее и не так весело у меня на сайте
Оглавление

Пролог: пять минут превращаются в вечность

Я хотел настроить в ISPmanager запуск Python-скрипта load_apartments.py каждую ночь в 01:00. Простая задача, да? В консоли скрипт пел и плясал, в ISPmanager с ручным запуском — тоже. Но в штатном режиме cron выдал: "Ошибка! Таблица users не найдена!" И началась моя эпопея.

Почему я застрял?

  1. Забыл, как было раньше: На старом сервере всё работало, но я не записал команду. Память подвела, и пришлось изобретать велосипед заново.
  2. ISPmanager подложил свинью: Поле "Рабочая директория" (/root/rent_bot/) работает только при ручном запуске. В автоматическом режиме — пшик! Скрипт искал базу данных не там.
  3. Логи утекли в нирвану: ISPmanager любит добавлять >/dev/null, и без логов я был как слепой котёнок.
  4. Упрямство уровня "профи": Я знал, что база в порядке, и отвергал всё, что пахло сложностями, вроде новых файлов. Хотел вернуть старую магию!

Разгадка тайны

Ошибка была в том, что cron не знал, где искать database.db. В консоли я сидел в /root/rent_bot/, и всё было ок. В ISPmanager при ручном запуске я задавал каталог, и тоже ок. А в автоматическом режиме — хаос! Нужна была команда, которая сама знает свой дом. И вот она, звезда шоу:

/bin/bash -c "(cd /root/rent_bot && source /root/rent_bot/myenv/bin/activate && python3 /root/rent_bot/load_apartments.py >> /root/rent_bot/cron.log 2>&1)"

  • cd /root/rent_bot — "Эй, работай отсюда!"
  • Скобочки () — чтобы логи в cron.log не утонули в >/dev/null.
  • И вуаля, всё заработало!

Мораль: пиши, не ленись!

Почему я так долго мучился? Потому что не записал старую команду! Документирование — как запасной парашют. Вот почему оно важно:

  • Не теряй время: Заметка вроде "cron: эта команда" спасла бы часы.
  • Сохраняй нервы: Без записей я чуть не поседел, воюя с ISPmanager.
  • Делись с будущим собой: Через год я опять забуду, и заметки выручат.
  • Учись на ошибках: Записывая, я понял, что ISPmanager — хитрый зверь.

Теперь я веду файл cron_tricks.txt и клянусь записывать каждую мелочь. Даже если кажется, что "это же просто"! 😄

подробнее и не так весело у меня на сайте