# Конфигурация GlobalScheduler в автономном режиме

## Настройка конфигурационного файла
Расположение основного файла конфигурации: `/opt/global/globalserver/application/config/tools/scheduler/quartz.properties`.

Создайте файл конфигурации планировщика:

```bash
sudo mkdir -p /opt/global/globalserver/application/config/tools/scheduler
sudo touch /opt/global/globalserver/application/config/tools/scheduler/quartz.properties
```

Вставьте содержимое:

```properties
org.quartz.scheduler.instanceName = PostgresScheduler
org.quartz.scheduler.instanceId = AUTO

org.quartz.threadPool.class = ru.bitec.jobscheduler.threadpool.GsfThreadPool
org.quartz.threadPool.threadCount = 500

org.quartz.jobStore.class = ru.bitec.jobscheduler.jobstore.GsfJobStore
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.jobStore.dataSource = quartzDS
org.quartz.jobStore.dontSetAutoCommitFalse=false

org.quartz.dataSource.quartzDS.driver = org.postgresql.Driver
org.quartz.dataSource.quartzDS.URL = jdbc:postgresql://<DBHOST>:5432/<DBNAME>?ApplicationName=Global-Scheduler
org.quartz.dataSource.quartzDS.user = <DBUSER>
org.quartz.dataSource.quartzDS.password = <DBPASS>

org.quartz.jobStore.tablePrefix=btk_qrtz_
org.terracotta.quartz.skipUpdateCheck=true

ru.bitec.jobscheduler.jobThreadWatcher.durationBetweenChecks = 10000
ru.bitec.jobscheduler.webserver.port = 8180

```

Где:
- \<DBHOST> — адрес сервера postgres;
- \<DBNAME> — имя БД;
- \<DBUSER> — пользователь БД;
- \<DBPASS> — пароль пользователя БД.

## Настройка логирования планировщика
Создайте файл конфигурации лога планировщика.

```bash
sudo touch /opt/global/globalserver/application/config/tools/scheduler/logback.xml
```

Вставьте содержимое:

```xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

   <appender name="STDOUT_DEFAULT" class="ch.qos.logback.core.ConsoleAppender">
      <!-- encoders are assigned the type
      ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
      <encoder>
         <pattern>[%d{dd-MM-yyyy HH:mm:ss.SSS}] [%level] [%thread] [%logger] - %msg%n</pattern>
      </encoder>
   </appender>

   <appender name="FILEOUT_SESSION" class="ch.qos.logback.core.rolling.RollingFileAppender">
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
         <fileNamePattern>/opt/global/globalserver/logs/scheduler/jobscheduler.%d{yyyy-MM-dd_HH}.log</fileNamePattern>
         <maxHistory>1488</maxHistory>
         <totalSizeCap>5GB</totalSizeCap>
         <cleanHistoryOnStart>true</cleanHistoryOnStart>
      </rollingPolicy>
      <encoder>
         <pattern>[%d{dd-MM-yyyy HH:mm:ss.SSS}] [%level] [%thread] [%logger] - %msg%n</pattern>
      </encoder>
   </appender>

   <!--
       Возможные значения параметра "level" в порядке приоритета важноости
       OFF
       ERROR
       WARN
       INFO
       DEBUG
       TRACE
       ALL
   -->

   <root level="INFO">
      <appender-ref ref="STDOUT_DEFAULT"/>
      <appender-ref ref="FILEOUT_SESSION"/>
   </root>

</configuration>
```

## Настройка сервиса globalscheduler
Для настройки сервиса скопируйте файл `/opt/global/globalserver/admin/linux/scheduler/globalscheduler.service.origin` в каталог `/lib/systemd/system` и переименуйте `globalscheduler.service`.

```bash
sudo cp /opt/global/globalserver/admin/linux/scheduler/globalscheduler.service.origin /lib/systemd/system/globalscheduler.service
```

или создайте новый файл:

```bash
sudo touch /usr/lib/systemd/system/globalscheduler.service
```

Содержимое:

```text
[Unit]
Description=Менеджер заданий Global SE Postgres
After=multi-user.target

[Service]
Type=idle
WorkingDirectory=/opt/global/globalserver
ExecStart=/opt/global/globalserver/globalscheduler.sh

TimeoutStopSec=110

[Install]
WantedBy=multi-user.target
```

Разрешите автозагрузку сервиса:

```bash
sudo systemctl daemon-reload
sudo systemctl enable globalscheduler
```

## Установка приватного ключа
В основном файле конфигурации планировщика `quartz.properties` укажите путь до файла с закрытым ключом шифрования (quartz.privatekey.txt/quartz.private.pem) в параметре.

```text
ru.bitec.jobscheduler.privatekey.path = /some/path/to/file
```

Пример конфигурации:

```text
ru.bitec.jobscheduler.privatekey.path = /opt/global/globalserver/application/config/tools/scheduler/quartz.private.pem
```

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

Для применения конфигурации перезапустите сервис `globalscheduler`:

```bash
sudo systemctl restart globalscheduler.service
```

## Установка публичного ключа и настроек Quartz
Для указания открытого ключа для проверки токена авторизации планировщика заданий откройте приложение **Настройка системы**.

Откройте меню: `Настройки и сервисы -> Настройки модулей системы -> Общие настройки модулей`.

![Общие настройки модулей](img/ModuleSetting.png)

В списке выберите модуль btk и откройте на редактирование

![Выбор модуля btk](img/BtkSetting.png)

В открывшемся окне выберите `Настройки для Quartz` и нажмите на кнопку с тремя точками:

![](img/BtkQuartzSettings.png)

В открывшемся окне задайте следующие значения:
- **База данных**: alias базы данных из файла `global3.config.xml`.
- **HTTPS включён**: в зависимости от того, используется ли https в Global, включите данную опцию.
- **Логин**: логин пользователя scheduler в Global (scheduler по умолчанию).
- **Пароль**: пароль пользователя scheduler в Global.
- **Публичный ключ**: открытый ключ (содержимое файла `quartz.publickey.txt/quartz.public.pem`).
- **Soap хост**: домен/IP адрес, на котором доступен Global;
- **Soap порт**: порт, на котором доступен Global (8080 по умолчанию).

Пример конфигурации:

![](img/QuartzPublicKey.png)

По завершению конфигурации нажмите зеленую стрелку, а затем операцию **Сохранить** в окне с настройками модуля `btk`.

## Установка cacerts для java
Для работы `globalscheduler` с использованием `ssl`, добавьте сертификаты в хранилище `java`. Для этого используйте утилиту `keytool`:

```bash
sudo keytool -import -keystore <cacerts path> -alias <Alias_Name> -file <certificate file location>
```

Где:
- `cacerts path` — путь до файла `cacerts`, пример пути `/usr/lib/jvm/bellsoft-java21-full-amd64/lib/security/cacerts`;
- `alias name` — название записи;
- `certificate file location` — путь до сертификата.

Пример полной команды:

```bash
sudo keytool -import -keystore /usr/lib/jvm/bellsoft-java21-full-amd64/lib/security/cacerts -alias gs-ca -file /home/sysadm/gs-CA.crt
```

## Перезапуск работы

При необходимости перезапуска сервиса `globalscheduler` выполните следующую команду:

```bash
sudo systemctl restart globalscheduler.service
```

Для синхронизации работы сервиса без его перезапуска, после применения изменений в настройках Quartz (`Настройки и сервисы -> Настройки модулей системы -> Общие настройки модулей`), необходимо сбросить кеши и синхронизировать задачи планировщика. Для этого:

1. Откройте пункт меню **Сервис** -> **Управление решением** -> **Очистить все кэши**.

    ![Очистить все кэши](img/clear_cache.png)

2. В приложении `Настройки системы` откройте меню **Настройки и сервисы** -> **Менеджер заданий**.

    ![Менеджер заданий](img/JobManager.png)
    
    В открывшемся окне выполните операцию **Синхронизировать все**.
    
    ![Синхронизировать все](img/GenKeyPair.png)

## Проверка работоспособности сервиса

Перейдите в **Менеджер заданий**:

![Менеджер заданий](img/JobManager.png)

Правой кнопкой мыши нажмите на активное задание, перейдите в пункт **Дополнительно**, выполните команду **Выполнить задачу**:

![Выбранное задание](img/SchedulerAllTasks.png)

В нижней части страницы перейдите в окно настроек задачи, перейдите на вкладку **Журнал**. В списке будет отображены даты запуска выбранной задачи. Обновите список кнопкой **Обновить**, через некоторое время `scheduler` выполнит задачу и ее состояние переключится на **Выполнено**. Если спустя несколько минут состояние не обновилось, необходимо проверить логи сервиса на предмет ошибок, а также перепроверить конфигурацию и настройки.

![Проверка задания](img/SchedulerReadyTask.png)
