-
-
Notifications
You must be signed in to change notification settings - Fork 129
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #784 from astra-modx/master
crontabmanager console snippet pid
- Loading branch information
Showing
5 changed files
with
317 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 выполняет задания автоматически. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
# Интерфейс | ||
|
||
## Добавить задание - контроллер | ||
|
||
Через скрипт контроллера | ||
|
||
[](https://file.modx.pro/files/5/a/6/5a63ac91b0aec4774b2e863e175ba999.png) | ||
|
||
|
||
|
||
## Добавить задание - сниппет | ||
|
||
Создайте сниппет который будет запускать автоматически и привяжите его крон заданию | ||
|
||
[](https://file.modx.pro/files/d/5/e/d5ecfe8fbc76872995c252d40ee6940f.png) | ||
|
||
#### Содержание сниппета | ||
|
||
```php | ||
<?php | ||
echo "Test" . PHP_EOL; | ||
|
||
return 0; # Ошибка | ||
return 1; # Успех | ||
``` | ||
|
||
Для успешного завершения задачи, необходимо вернуть: `return 1;` иначе крон задание завершиться с ошибкой |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
# Настройки | ||
|
||
Для запуска crontab на сервере нужно перейти на вкладку настройки и добавить задание в крон для запуска | ||
|
||
[](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 | ||
``` | ||
|
||
Используя этот метод, можно включать и выключать задания через панель администрирования. Задания автоматически будут запускаться на вашем сервере. | ||
|
||
 | ||
|
||
--- | ||
|
||
## 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 | ||
``` | ||
|
||
Задание делает паузу в одну минуту, после окончания запуска всех команд в текущее время. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | ||
|