Skip to content

Commit

Permalink
Merge pull request #784 from astra-modx/master
Browse files Browse the repository at this point in the history
crontabmanager console snippet pid
  • Loading branch information
Ibochkarev authored Dec 12, 2024
2 parents 1ab9650 + 9e8259d commit 65b4ed0
Show file tree
Hide file tree
Showing 5 changed files with 317 additions and 0 deletions.
140 changes: 140 additions & 0 deletions docs/components/crontabmanager/command.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
# Консоль

Запуск команд из под консоля ssh с помощью `php core/scheduler/artisan`

## Исполняемый файл

По умолчанию команды можно запускать из консоли с помощью следующей команды:

```shell
php core/scheduler/artisan list
```

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

```shell
php artisan list
```

Создадим файл `artisan` (или скопируем его с помощью команды `cp core/scheduler/artisan.example artisan`):

```shell
cat > artisan << 'EOF'
#!/usr/bin/env php
<?php
define('MODX_CRONTAB_MODE', true);
require_once __DIR__.'/core/scheduler/index.php'; // Проверьте путь к директории core
$Artisan = new \Webnitros\CronTabManager\Artisan\Builder($scheduler, $argv);
$Artisan->run();
EOF
```

## Команды

#### Список всех команд

```shell
php artisan list
# Available commands:
# completion Dump the shell completion script
# demo Демонстрация контроллера
# help Display help for a command
# list List commands
# command
# command:create Создает новый контроллер.
# schedule
# schedule:list Список запланированных задач
# schedule:run Запуск текущих задач
# schedule:work Запуск запланированных задач
# support
# support:clearlogmanager Очистка логов менеджеров старше 2 месяцев
```

#### Создание команды

Создание примера контроллера с передачей аргумента `arg_name`:

```shell
# --name имя новой команды для запуска
php artisan command:create --name=MySuperTask

# Создаст контроллер с именем: CrontabControllerMySuperTask [команда: php artisan mysupertask --arg_name=water]
# Путь к контроллеру: /var/www/html/core/scheduler/Controllers/MySuperTask.php
```

#### Запуск команды

Используя предыдущий пример:

```shell
php artisan mysupertask --arg_name=water

# [INFO] Hello: water <----- Наш аргумент
```

### Содержимое контроллера команды

```php
<?php

/**
* Новая команда "php artisan mysupertask --arg_name=water"
*/
class CrontabControllerMySuperTask extends modCrontabController
{
protected $signature = 'mysupertask {--arg_name}'; // необязательные аргументы

public function process()
{
$name = $this->getArgument('arg_name', 'world');
$this->info('Hello: '.$name);
}
}
```

Можно изменить `signature` контроллера на **my-super-task**, чтобы команда была доступна под этим именем:

```shell
php artisan my-super-task --arg_name=water

# [INFO] Hello: water
```

## Crontab

Задания Cron запускаются на основе созданных команд, и все запланированные задачи хранятся в базе данных.

#### Добавление команды в задачи Cron

```shell
php artisan crontab:add --command=mysupertask
```

#### Список заданий Cron

```shell
php artisan schedule:list

# ------ -------- ------------- --------------------- ----------------- ---------------------------
# Path Active Crontab Next run Diff Comment
# ------ -------- ------------- --------------------- ----------------- ---------------------------
# demo Yes */1 * * * * 2024-11-30 05:48:00 через 6 секунд Тестовое задание для демонстрации
# ------ -------- ------------- --------------------- ----------------- ---------------------------
```

#### Запуск текущих заданий Cron

Будут выполнены задания, которые совпадают с текущим временем.

```shell
php artisan schedule:run
# // Тестовое задание для демонстрации работы контроллера...
#
# [INFO] [1 1 * * *] mysupertask.php run
```

### Настройка времени для crontab

В административной части сайта можно настроить время для крон
[manager](http://127.0.0.1:9001/manager/?a=home&namespace=crontabmanager)

23 changes: 23 additions & 0 deletions docs/components/crontabmanager/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
title: CronTabManager
description: Автоматически запуск скриптов по расписанию
logo: https://modstore.pro/assets/extras/crontabmanager/logo-md.png
author: webnitros
modstore: https://modstore.pro/packages/utilities/crontabmanager
repository: https://github.com/astra-modx/modx-app-crontabmanager

items: [
{ text: 'Настройки', link: 'setting' },
{ text: 'Интерфейс', link: 'interface' },
{ text: 'Команды', link: 'command' },
{ text: 'Фоновый задания', link: 'сrontab' },
]
---
# CronTabManager

Это удобный инструмент для автоматического запуска заданий в фоновом режиме прямо из панели управления вашего сайта на MODX Revolution.

## Что такое «crontab»?

Это специальный механизм, который позволяет автоматизировать выполнение задач на сервере, например, отправку писем, обновление данных или запуск скриптов по
расписанию. Вы задаете расписание (например, «каждый час» или «раз в неделю»), а crontab выполняет задания автоматически.
27 changes: 27 additions & 0 deletions docs/components/crontabmanager/interface.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Интерфейс

## Добавить задание - контроллер

Через скрипт контроллера

[![](https://file.modx.pro/files/5/a/6/5a63ac91b0aec4774b2e863e175ba999s.jpg)](https://file.modx.pro/files/5/a/6/5a63ac91b0aec4774b2e863e175ba999.png)



## Добавить задание - сниппет

Создайте сниппет который будет запускать автоматически и привяжите его крон заданию

[![](https://file.modx.pro/files/d/5/e/d5ecfe8fbc76872995c252d40ee6940fs.jpg)](https://file.modx.pro/files/d/5/e/d5ecfe8fbc76872995c252d40ee6940f.png)

#### Содержание сниппета

```php
<?php
echo "Test" . PHP_EOL;

return 0; # Ошибка
return 1; # Успех
```

Для успешного завершения задачи, необходимо вернуть: `return 1;` иначе крон задание завершиться с ошибкой
89 changes: 89 additions & 0 deletions docs/components/crontabmanager/setting.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# Настройки

Для запуска crontab на сервере нужно перейти на вкладку настройки и добавить задание в крон для запуска

[![](https://file.modx.pro/files/c/9/6/c9634c8ea7f96f6e68eb35d66c04393bs.jpg)](https://file.modx.pro/files/c/9/6/c9634c8ea7f96f6e68eb35d66c04393b.png)

## Schedule console

Добавление крон задания в linux crontab

Войдите на сервер по ssh:

```bash
ssh [email protected]
```

> **Примечание**: Замените `user` и `ip адрес 127.0.0.1` на имя пользователя, под которым работает сайт, и IP адрес для подключения.
Выполните команду от вашего пользователя:

```bash
crontab -e
```

> **Примечание**: Для выполнения от имени ROOT-пользователя:
```bash
crontab -u www-data -e
```

> **Внимание!!** Не выполняйте команду `crontab -e` под ROOT пользователем без явного указания USER, иначе после исполнения команды у сайта пропадут доступы к
> созданным файлам.
3. Откроется редактор [nano](https://www.digitalocean.com/community/tutorials/how-to-use-cron-to-automate-tasks-ubuntu-1804), при первом запуске может спросить,
какой редактор использовать по умолчанию.

4. Добавьте строку в конец файла:

```bash
*/1 * * * * /usr/local/bin/php /var/www/html/core/scheduler/artisan schedule:run 2>&1
```

5. Сохраните изменения и выполните выход из файла: **CTRL+x && Yes Enter**

Пример как будет выглядеть crontab:

```bash
# modX component CronTabManager
*/1 * * * * /usr/local/bin/php /var/www/html/core/scheduler/artisan schedule:run 2>&1
```

**CronTab** запускается каждую минуту и выполняет команду от имени вашего пользователя `www-data`.

### Дополнительная информация

Узнать, под каким пользователем подключились (просто введите "id"):

```bash
id
# ---> uid=82(www-data) gid=82(www-data) groups=82(www-data)
```

Для переключения на пользователя из под root можно выполнить команду:

```bash
su - www-data
```

Используя этот метод, можно включать и выключать задания через панель администрирования. Задания автоматически будут запускаться на вашем сервере.

![Включение-выключение крон заданий](https://raw.githubusercontent.com/astra-modx/modx-app-crontabmanager/refs/heads/master/docs/images/task_enable.png)

---

## Schedule Work console

Для подключения через supervesor (php artisan schedule:work):

```ini
[program:crontab]
command = php /var/www/html/core/scheduler/artisan schedule:work
user = www-data
autostart = true
autorestart = true
redirect_stderr = true
stdout_logfile = /dev/stdout
```

Задание делает паузу в одну минуту, после окончания запуска всех команд в текущее время.
38 changes: 38 additions & 0 deletions docs/components/crontabmanager/сrontab.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
## Crontab

Задания Cron запускаются на основе созданных команд, и все запланированные задачи хранятся в базе данных.

#### Добавление команды в задачи Cron

```shell
php artisan crontab:add --command=mysupertask
```

#### Список заданий Cron

```shell
php artisan schedule:list

# ------ -------- ------------- --------------------- ----------------- ---------------------------
# Path Active Crontab Next run Diff Comment
# ------ -------- ------------- --------------------- ----------------- ---------------------------
# demo Yes */1 * * * * 2024-11-30 05:48:00 через 6 секунд Тестовое задание для демонстрации
# ------ -------- ------------- --------------------- ----------------- ---------------------------
```

#### Запуск текущих заданий Cron

Будут выполнены задания, которые совпадают с текущим временем.

```shell
php artisan schedule:run
# // Тестовое задание для демонстрации работы контроллера...
#
# [INFO] [1 1 * * *] mysupertask.php run
```

### Настройка времени для crontab

В административной части сайта можно настроить время для крон
[manager](http://127.0.0.1:9001/manager/?a=home&namespace=crontabmanager)

0 comments on commit 65b4ed0

Please sign in to comment.