# Запуск процесса в фоновом режиме, как сервис

Фоновый запуск полезен, если вы хотите организовать постоянный доступ извне к службам или панели управления на удалённом компьютере.

## Создание и управление сервисами

Создание и управление сервисами доступно во всех поддерживаемых платформах. Для создания работы с сервисами используется команда `tuna service` или `tuna svc`.

примечание

Все актуальные флаги, подсказки и примеры можно посмотреть вызвав справку:

```shell
tuna service --help
tuna service install --help
tuna service start --help
tuna service restart --help
tuna service stop --help
tuna service uninstall --help

```

### Создание сервиса

к сведению

В Windows нужно выполнять команды в PowerShell от имени администратора, в Linux и FreeBSD потребуется sudo или root пользователь. В macOS сервис создаётся под текущим пользователем и привилегии не нужны.

Команда `tuna service install` указывает, что нужно зарегистрировать новый сервис. Можно создать несколько сервисов с разными именами, передавая имя через флаг `--name` или переменную окружения `TUNA_SERVICE_NAME`, по умолчанию **tuna**. После `--` описывается команда которая будет запускаться в сервисе.

```shell
tuna service install -- tuna --config=С:\Users\Administrator\AppData\Local\tuna\tuna.yml http 8080 --subdomain=web 

```

В примере выше явно передан полный путь к [конфигурационному файлу](https://tuna.am/docs/guides/config-file.md), это может быть необходимо так как сервис создаётся из под администратора, а файл с токеном находится в профиле текущего пользователя. С большей вероятностью это потребуется в Windows, Linux и FreeBSD и не потребуется в macOS. Также вы можете передать токен явно в аргументах:

```shell
tuna service install --name=tuna-web -- tuna http 8080 --subdomain=web --token=<tt_ваш_токен>

```

Для большей безопасности в Linux, FreeBSD и macOS токен будет вырезан из аргументов запуска и передан как переменная окружения, так что вы не увидите токен в списке процессов.

Внимание

Так как в Windows, Linux и FreeBSD сервис создаётся от привилегированного пользователя, по умолчанию процесс будет также запущен от него, в целях безопасности не рекомендуется запускать tuna от привилегированного пользователя. Поэтому вы можете указать явно пользователя от имени которого будет запускаться процесс с помощью флага `--user`или переменную окружения `TUNA_SERVICE_INSTALL_USER`. В Windows также может потребоваться передать и пароль пользователя с помощью флага `--password`или переменную окружения `TUNA_SERVICE_INSTALL_PASSWORD`.

```shell
tuna service install --user=ubuntu -- tuna http 8080 --subdomain=web --token=<tt_ваш_токен>

```

### Запуск сервиса

Запуск осуществляется командой `tuna service start`.

Пример с передачей имени:

```shell
tuna service start --name=tuna-web

```

### Перезапуск сервиса

Перезапуск осуществляется командой `tuna service restart`.

Пример с передачей имени:

```shell
tuna service restart --name=tuna-web

```

### Проверка статуса сервиса

Проверка статуса осуществляется командой `tuna service status`.

Пример с передачей имени:

```shell
tuna service status --name=tuna-web

```

### Остановка сервиса

Остановка осуществляется командой `tuna service stop`.

Пример с передачей имени:

```shell
tuna service stop --name=tuna-web

```

### Удаление сервиса

Удаление осуществляется командой `tuna service uninstall`.

Пример с передачей имени:

```shell
tuna service uninstall --name=tuna-web

```

## Отладка и поиск проблем

Если сервис не работает или работает некорректно, в первую очередь необходимо проверить журналы сервиса. Tuna представляет лишь верхнеуровневую обвязку для создания и запуска сервиса, способ отладки будет зависеть от вашей системы.

**Windows**

Для управления службой tuna в Windows, можно воспользоваться инструментом **Службы (Services)**. В списке служб найдите `tuna` (или имя вашей службы). Щелкните правой кнопкой мыши на службу и выберите нужное действие: Запустить, Остановить или Перезапустить.

Для просмотра журналов службы tuna, можно воспользоваться инструментом **Просмотр событий (Event Viewer)** или PowerShell. В **Просмотре событий** откройте **Windows Logs > Application или System**, чтобы найти журналы, связанные с вашей службой.

Просмотр журналов через PowerShell:

```powershell
Get-EventLog -LogName System -Source tuna

```

**macOS**

подсказка

По умолчанию macOS имеет политики управления энергией, которые заставляют компьютер засыпать и тогда сервис станет недоступным, но это поведение можно настроить, если вы хотите использовать компьютер с macOS в режиме сервера. Посмотреть текущий план питания можно с помощью команды `pmset -g`. Для постоянной работы в фоне выставьте следующие значения:

```shell
sudo pmset -a sleep 0
sudo pmset -a autorestart 1
sudo pmset -a networkoversleep 1
sudo pmset -a tcpkeepalive 1
sudo pmset -a powernap 0
sudo pmset -a womp 1

```

При создании сервиса будет создан файл `<имя_сервиса>.plist` в директории `~/Library/LaunchAgents`. Для управления сервисом используйте команду `launchctl`.

Для просмотра журналов откройте приложение **Console из Applications > Utilities**, перейдите к разделу `system.log` или используйте поисковую строку для поиска по ключевым словам, таким как `tuna`.

Просмотр журналов в терминале:

```shell
log show --predicate 'process == "tuna"' --info

```

**Linux**

примечание

Отладка описана только для **systemd**, если вы используете дистрибутив с **sysvinit** или **openrc** мы предполагаем, что вы опытный пользователь Linux и сможете самостоятельно отладить работу сервиса.

При создании сервиса будет создан файл `<имя_сервиса>.service` в директории `/etc/systemd/system`. Для управления сервисом используйте команду `systemctl`.

Просмотр журналов:

```shell
sudo journalctl -xe -f -u <имя_сервиса>

```

**FreeBSD**

При создании сервиса будет создан файл `<имя_сервиса>` в директории `/usr/local/etc/rc.d/`. Для управления сервисом используйте команду `service`.

По умолчанию stdout и stderr должен собираться в системный журнал.

## Запуск сервиса в Docker Compose

В качестве альтернативы можно использовать запуск сервиса с Docker Compose

Создайте `compose.yml` файл с описанием сервиса:

```yaml
---
name: tuna
services:
  web:
    image: yuccastream/tuna:latest
    command: http 3000 --subdomain=web
    restart: always
    network_mode: "host"
    environment:
      - TUNA_TOKEN=<ваш_токен>

```

Важно

Опция `network_mode: "host"`, аналог `--net=host`, по умолчанию доступна только в Linux. Чтобы это заработало в Windows и macOS требуется включить эту бета функцию в Docker Desktop. Чтобы включить эту функцию, перейдите на вкладку **Features in development** в **Settings** , а затем выберите **Enable host networking**.

Запуск сервиса:

```shell
docker compose up -d

```

Остановка сервиса:

```shell
docker compose down -v

```

Просмотр журналов:

```shell
docker compose -f web

```
