# Posso adicionar um serviço runit em um plugin?

**URL:** https://meta.discourse.org/t/can-i-add-an-runit-service-in-a-plugin/205086
**Category:** Development
**Created:** [3 Outubro , 2021 12:14 UTC](https://meta.discourse.org/t/can-i-add-an-runit-service-in-a-plugin/205086 "2021-10-03T12:14:51Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![spirobel](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/spirobel/32/170908_2.png) [@spirobel](https://meta.discourse.org/u/spirobel)
#### Post date: [3 Outubro , 2021 12:14 UTC](https://meta.discourse.org/t/can-i-add-an-runit-service-in-a-plugin/205086/1 "2021-10-03T12:14:52Z")

</div>

Olá, gostaria de saber se é possível adicionar um serviço runit em um plugin? Caso não seja possível, adoraria ouvir sobre suas estratégias para lidar com esse tipo de problema: tenho um programa C++ de longa execução que precisa ser executado junto com o Discourse. Ele deve ser reiniciado automaticamente e se comportar basicamente como um daemon. Muito obrigado!

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [3 Outubro , 2021 12:19 UTC](https://meta.discourse.org/t/can-i-add-an-runit-service-in-a-plugin/205086/2 "2021-10-03T12:19:32Z")

</div>

Você pode instalar coisas dentro do app.yml e executar comandos do sistema dentro do Rails para verificar e executar tarefas. Você poderia encapsular um despachante em um job regular?

---

<div class="post-metadata">

### Author: ![spirobel](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/spirobel/32/170908_2.png) [@spirobel](https://meta.discourse.org/u/spirobel)
#### Post date: [3 Outubro , 2021 12:23 UTC](https://meta.discourse.org/t/can-i-add-an-runit-service-in-a-plugin/205086/3 "2021-10-03T12:23:50Z")

</div>

> [@merefield](#):
>
> Você pode instalar coisas dentro do app.yml

isso é realmente trabalhoso. Idealmente, tudo aconteceria no plugin.  
obrigado pela sua resposta. 🙂 👍

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [3 Outubro , 2021 12:29 UTC](https://meta.discourse.org/t/can-i-add-an-runit-service-in-a-plugin/205086/4 "2021-10-03T12:29:08Z")

</div>

O padrão parece ser o correto para mim, já que os templates são como o Docker Compose.

Uso isso para clonar e criar um Frotz simples no plugin Discourse Frotz. É extremamente confiável.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [3 Outubro , 2021 17:42 UTC](https://meta.discourse.org/t/can-i-add-an-runit-service-in-a-plugin/205086/5 "2021-10-03T17:42:58Z")

</div>

Para algumas tarefas de longa duração em um plugin que escrevi, usei a interface de jobs para executar algumas tarefas do Ansible que podem levar horas para serem concluídas.

Mas, se for “ao lado” do aplicativo, um template no app.yml parece adequado; se for “iniciado pelo Discourse”, um job faz mais sentido.

---

<div class="post-metadata">

### Author: ![schleifer](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/schleifer/32/86416_2.png) [@schleifer](https://meta.discourse.org/u/schleifer)
#### Post date: [8 Outubro , 2021 07:47 UTC](https://meta.discourse.org/t/can-i-add-an-runit-service-in-a-plugin/205086/6 "2021-10-08T07:47:22Z")

</div>

> [@spirobel](#):
>
> é possível adicionar um serviço runit em um plugin?

Não é. Dentro do container, todo o código do plugin é executado como o usuário `discourse`. Esse usuário não possui permissões suficientes (dentro do container, novamente) para controlar serviços runit.

> [@spirobel](#):
>
> Se isso não for possível, ficarei feliz em ouvir sobre suas estratégias para lidar com esse tipo de problema.

Execute o processo em outro container Docker no mesmo hardware. Ele deve escutar em uma porta TCP local. Exporte a URL para conectar ao outro serviço no bloco [`env:`](https://github.com/discourse/discourse_docker/blob/ee061f17a9926e41dd4ea13334246939db10ea59/samples/standalone.yml#L39) do `app.yaml`, por exemplo:

```plaintext
env:
    CUSTOM_SERVICE_URL: 'localhost:5309'

```

Faça com que o plugin obtenha a string de conexão por meio de `ENV["CUSTOM_SERVICE_URL"]`.
