Настройка cron-задачи

Что это такое: небольшое «сердцебиение», которое вы настраиваете один раз, чтобы TSync мог сам выполнять задачи по расписанию — даже когда никто не вошёл в систему. Представьте, что вы заводите часы: как только они начинают тикать, TSync тихо берёт на себя рутинную работу в фоне каждую минуту.

Почему это важно: без этого «сердцебиения» несколько удобных функций просто никогда не сработают. Если напоминания не отправляются, а повторяющиеся счета не появляются — почти всегда причина именно в этом.

Вот что перестаёт работать, когда «сердцебиение» отсутствует:

  • Повторяющиеся счета не создаются автоматически
  • Напоминания (о просроченном счёте, о задаче со сроком, об истекающем договоре) не отправляются
  • Импорт лидов из почты не подхватывает новые письма
  • Автоматическое резервное копирование не запускается
  • Уведомления о подписках по почте не уходят

Поэтому настройка этого — обязательный шаг для полноценно работающей системы. Хорошая новость: вы делаете это один раз и потом забываете.

Единственная команда, которую нужно выполнять TSync

Это инструкция, которую ваш сервер будет запускать по таймеру. Она говорит серверу «запусти фоновый скрипт TSync»:

php -q /full/path/to/tsyncerp/pipe.php cron

Чтобы заполнить пропуски, вам понадобится узнать настоящее расположение двух вещей:

  • Где установлен TSync — замените /full/path/to/tsyncerp/ на вашу реальную папку.
  • Где находится PHP — большинство серверов понимают просто php, но для надёжности используйте полный путь. Эта маленькая команда покажет его:
which php       # обычно выводит что-то вроде /usr/bin/php
which php8.1    # на некоторых серверах он назван с версией

Как часто? Идеально — раз в минуту: так напоминания и счета появляются практически мгновенно.

Выберите ниже раздел, который подходит вашему хостингу. Нужен только один.

На Linux (cPanel, Plesk или собственный сервер)

Простой способ (панель cPanel)

Если хостинг даёт вам cPanel — это самый лёгкий путь, никаких команд набирать не нужно:

  1. В cPanel откройте Cron Jobs (в разделе «Дополнительно» / Advanced).
  2. В блоке Common Settings выберите Once per minute (* * * * *) (раз в минуту).
  3. В поле Command вставьте (со своим реальным путём):
    /usr/bin/php -q /home/USERNAME/public_html/pipe.php cron
    
  4. Нажмите Add New Cron Job. Готово.

Способ для Plesk

  1. В Plesk откройте свой сайт и перейдите в Запланированные задачи (Scheduled Tasks).
  2. Нажмите Add TaskRun a command.
  3. В поле Command введите (со своим реальным путём): php /var/www/vhosts/your-domain/httpdocs/pipe.php cron
  4. Задайте Run в формате Cron как * * * * * (это код для «каждую минуту»).
  5. Нажмите OK.

Способ через командную строку (с помощью crontab)

Если вам комфортно подключаться к серверу по SSH, это сработает на любой Linux-машине. Откройте свой личный список запланированных задач:

crontab -e

Добавьте эту единственную строку — она означает «каждую минуту тихо запускать фоновый скрипт TSync»:

* * * * * /usr/bin/php -q /var/www/tsyncerp/pipe.php cron > /dev/null 2>&1

(Часть > /dev/null 2>&1 нужна лишь для того, чтобы сервер не присылал вам письмо с выводом каждую минуту.)

Сохраните и выйдите. Если ваш редактор — vim, наберите :wq; если nano — нажмите Ctrl+O, Enter, затем Ctrl+X.

Чтобы перепроверить, что строка сохранилась:

crontab -l    # выводит список ваших запланированных задач

На Windows Server (Планировщик заданий)

В Windows есть встроенный инструмент Планировщик заданий (Task Scheduler) для задач по расписанию:

  1. Откройте Планировщик заданий.
  2. Выберите Создать простую задачу и назовите её, например, «TSync cron».
  3. В качестве триггера выберите Ежедневно, затем настройте повтор каждую 1 минуту, бессрочно.
  4. В качестве действия выберите Запустить программу и заполните:
    • Программа: C:\php\php.exe (там, где у вас установлен PHP)
    • Аргументы: -q "C:\inetpub\wwwroot\tsyncerp\pipe.php" cron
    • Рабочая папка (Start in): C:\inetpub\wwwroot\tsyncerp\
  5. Нажмите «Готово».

Нет доступа к командной строке? Используйте веб-таймер

Если ваш хостинг не даёт SSH, но предлагает «HTTP cron» (таймер, который заходит на веб-адрес), вы можете направить его на cron-адрес TSync:

* * * * * wget -q -O /dev/null "https://your-domain.com/cron"

Небольшое предупреждение: этот вариант немного менее приватный, потому что любой, кто знает этот веб-адрес, может запустить задачу извне. Если есть выбор, способы с командной строкой выше — более безопасный вариант.

Проверьте, что всё действительно работает

Три простых способа убедиться, что «сердцебиение» тикает:

1. Запустите вручную один раз

Это запустит фоновый скрипт ровно один раз, прямо сейчас, чтобы вы увидели, всё ли в порядке:

php /var/www/tsyncerp/pipe.php cron

Нет ошибок — значит всё хорошо. Если же вы увидели сообщение, вот что оно означает простыми словами:

  • Could not open input file → путь к папке в команде неверный — перепроверьте его.
  • No such file для подключаемых файлов → проблема с правами доступа к папке блокирует доступ.
  • Database error → скрипт не может достучаться до базы данных из командной строки (встречается редко).

2. Загляните в сам TSync

Перейдите в Настройки → Settings → System/Server Info. Там показано время, когда cron запускался в последний раз. Если это было менее 5 минут назад — ваше «сердцебиение» здорово.

3. Загляните в журнал cron сервера (необязательно)

Если хотите получить подтверждение, что сервер запускает задачу:

# На Linux:
grep CRON /var/log/syslog | tail -20

Если что-то идёт не так

Вообще ничего не запускается

  • Выполните crontab -l — строка действительно на месте?
  • Используйте полный путь к PHP (/usr/bin/php), а не просто php. На этом спотыкаются многие.
  • Убедитесь, что у учётной записи, запускающей задачу, есть право запускать PHP.

Запускается, но ничего не происходит

  • Убедитесь, что база данных доступна из командной строки.
  • Проверьте время «последнего запуска cron» в разделе Настройки → Settings — обновляется ли оно.

Сообщение «Memory exhausted»

Задаче не хватило рабочей памяти. Дайте ей больше простора в файле php.ini:

memory_limit = 512M

(Учтите: командная строка иногда использует другой php.ini, нежели ваш сайт — убедитесь, что у обоих стоит щедрый лимит.)

Письма по-прежнему не отправляются, хотя cron работает

Это указывает на настройку почты, а не на cron:

  • Проверьте в Настройки → Settings → Email, что данные исходящей почты (SMTP) заполнены.
  • Отправьте тестовое письмо с того же экрана.

Более редкое расписание (только если хостинг вынуждает)

Некоторые бюджетные хостинги не дают запускать задачу каждую минуту. Тогда можно запускать её каждые 5 минут — напоминания и счета будут появляться лишь чуть менее мгновенно:

*/5 * * * * /usr/bin/php /var/www/tsyncerp/pipe.php cron > /dev/null 2>&1

Для большинства установок раз в минуту — более комфортный вариант.

Смотрите также