Blog Linux Avante

Receba notificações em sua área de trabalho ou telefone quando um comando de longa duração for concluído com Noti

25 de fevereiro de 2021

Comando de longa duração Noti terminou notificação desktop móvel

Sempre quis ser notificado quando um processo/comando de longa execução terminou, não apenas em seu desktop, mas também em seu telefone? Noti pode fazer isso.

Noti é uma ferramenta de linha de comando para macOS, Linux e Microsoft Windows que monitora um processo/comando e dispara uma notificação em sua área de trabalho ou telefone quando a execução é concluída.

Notificações com suporte:

  • Notificações na área de trabalho (banners)
  • Fala
  • BearyChat
  • Keybase
  • Mattermost
  • Pushbullet
  • Pushover
  • Pushsafer
  • Simplepush
  • Slack
  • Telegram
  • Zulip
  • Twilio

Todas essas notificações compatíveis funcionam no macOS, Linux e Windows.

É importante observar que, se tudo o que você deseja é receber uma notificação na área de trabalho quando um comando de longa execução for concluído no Linux, você pode simplesmente executar command; notify-send Done (por exemplo, sleep 3; notify-send Done).

Por padrão, Noti mostra apenas o texto "Done!" quando uma tarefa de longa duração é concluída, mas isso pode ser estendido. Você pode especificar o título da notificação (o padrão é o nome do utilitário), definir a mensagem de notificação (o padrão é "Done!"; Ler stdin com -) e mostrar o tempo de execução na mensagem de notificação.

Você pode usar Noti no início de um comando, por exemplo:

Comandos para usar no terminal

noti sleep 3

E após um comando, por exemplo:

Comandos para usar no terminal

sleep 3; noti

Você pode até usar Noti depois que um comando já foi iniciado, seja obtendo o PID do processo, então usando o seguinte comando:

Comandos para usar no terminal

noti --pwatch PID

Ou pressionando Ctrl + z depois que um processo foi iniciado para suspendê-lo temporariamente e retomá-lo com:

Comandos para usar no terminal

fg; noti

Para mais informações sobre o Noti, incluindo como configurar notificações Noti com vários serviços, variáveis de ambiente Noti, etc., consulte esta página. Enquanto testava isso, porém, percebi que esta página está um tanto desatualizada. Por exemplo, o Slack não permite mais a criação de tokens de teste legados. Portanto, você também pode verificar a página de manual do Noti daqui e do noti.yaml man daqui.

Leia mais sobre como instalar e configurar o Noti, incluindo instruções completas para configurar o Noti para notificar em seu dispositivo móvel via Telegram e Slack quando um comando de longa execução for concluído.

Instalando e configurando Noti

Baixar Noti

As instruções de instalação do Noti vinculadas usando o botão acima contêm várias maneiras de instalar esta ferramenta. Se você deseja obter o binário diretamente, basta acessar a [página de lançamentos do GitHub] da ferramenta (https://github.com/variadico/noti/releases).

A maneira mais fácil de instalar o Noti no Linux é baixar o binário da página de lançamentos, extrair o arquivo e instalar o binário noti em /usr/local/bin usando (assumindo que você extraiu o arquivo binário Noti em sua pasta pessoal e abriu o terminal em seu diretório inicial):

Comandos para usar no terminal

sudo install noti*linux-amd64/noti /usr/local/bin

Por padrão, Noti usa notificações na área de trabalho (banners). A seguir mostrarei como configurar o Noti para enviar notificações quando um processo demorado for finalizado, no seu dispositivo móvel via Slack e Telegram, já que é o que eu uso. Se você quiser usá-lo com outro serviço, você precisará configurá-lo por conta própria, usando as instruções (embora um pouco incompletas na minha opinião, e desatualizadas em alguns casos, por exemplo, você não pode mais criar tokens Slack, e você deve usar um aplicativo Slack) daqui.

Configure o Noti para notificá-lo quando um comando de longa execução for concluído, enviando uma mensagem no Telegram

Para fazer com que o Noti envie mensagens do Telegram quando um comando de longa duração terminar de ser executado, você precisará do Telegram chatId e token. Isso funciona com um chat ou canal do Telegram. Nas minhas instruções abaixo estaremos usando um canal do Telegram.

1. Crie um canal do Telegram

A primeira coisa que você precisa fazer é criar um canal do Telegram. Ele pode ter qualquer nome e descrição que você desejar.

2. Crie um bot do Telegram e obtenha o token de acesso HTTP API

Em seguida, você precisa usar BotFather (@botfather) para criar um bot e obter um token de acesso HTTP API.

Para fazer isso, inicie um bate-papo com @botfather e digite /start no bate-papo para ver os comandos disponíveis, etc. Agora digite /newbot para criar um novo bot e siga as instruções (você precisará definir um nome e um nome de usuário para o seu novo bot). Quando terminar, @botfather mostrará um token para acessar a API HTTP. Copie este token porque vamos precisar dele mais tarde.

3. Adicione o bot do Telegram criado na etapa 2 ao seu canal e obtenha o chatId

Agora temos um token, mas também precisamos obter o chatId.

Adicione o bot que você criou na etapa 2 ao seu novo canal do Telegram (vá para o canal e, nas opções, escolha Add users e procure o bot que você criou).

Assim que o bot for adicionado, digite uma mensagem no seu canal do Telegram. Isso é importante e necessário para obter o chatId.

Agora você pode obter o chatId visitando o seguinte link, que deverá ser editado:

https://api.telegram.org/botXXX:YYYYY/getUpdates

Substitua XXX:YYYYY pelo token de API HTTP do seu bot que você obteve na etapa 2.

Este link mostrará vários textos entre os quais você encontrará:

chat":{"id":-100999999999}

A id aqui é seu chatId que você precisa usar com Noti. Esse sinal - no início do número faz parte do chatId, portanto, certifique-se de usá-lo também, e não apenas os números.

4. Crie o arquivo de configuração Noti (se ainda não o tiver criado) e adicione Telegram a ele

Agora que conhecemos o Telegram chatId e a API HTTP token, crie o arquivo de configuração Noti, chamado noti.yaml em ~/.config/noti/

Abra este arquivo com um editor de texto e cole o seguinte:

telegram:  token: THE_HTTP_API_TOKEN_GOT_UNDER_STEP_2  chatId: 'THE_CHAT_ID_GOT_UNDER_STEP_3'

Exemplo (editado para não conter meus token e chatId reais):

telegram:  token: 1598888700:AEEijJJcsABpYR1LdJ4_Llkr1Vq48vxAUSg  chatId: '-10099999999999'

Teste Noti enviando uma mensagem de Telegram quando um comando de longa duração terminar de ser executado usando:

Comandos para usar no terminal

sleep 3; noti --telegram

Não se preocupe, você não precisa adicionar o parâmetro de linha de comando --telegram toda vez que usar o Noti. Você pode exportar NOTI_DEFAULT com uma lista de tipos de notificação para acionar, por exemplo, para usar notificações de banner na área de trabalho e notificações do Telegram, você precisa exportar NOTI_DEFAULT="banner telegram".

Adicione export NOTI_DEFAULT="banner telegram" ao arquivo ~/.profile para tornar a alteração permanente. Obviamente, edite os tipos de notificação NOTI_DEFAULT para o que deseja usar. Efetue logout e login novamente após fazer alterações em seu arquivo ~/.profile para usar as novas configurações.

Configure o Noti para notificá-lo quando um comando de longa execução terminar, enviando uma mensagem no Slack

A página de documentação do Noti menciona a criação de um token OAuth para teste e desenvolvimento, mas isso não é mais compatível com o Slack. Em vez disso, precisaremos criar um aplicativo Slack.

1. Faça login no Slack usando um navegador da web

2. Crie um aplicativo Slack

Vá para https://api.slack.com/apps/new e crie um novo aplicativo Slack usando o nome que desejar.

3. Ative Webhooks recebidos

Depois de criar um aplicativo Slack, você será redirecionado para a página de configurações do seu novo aplicativo. Aqui (tendo Basic Information selecionado na barra lateral esquerda), expanda a seção Add features and functionality e clique em Incoming Webhooks. Aqui, ligue a chave ao lado de Activate Incoming Webhooks.

4. Crie um Webhook de entrada

Na parte inferior da página Incoming Webhooks, clique em Add New Webhook to Workspace e selecione um canal ou você mesmo (com o último abaixo de Direct Messages). É aqui que você receberá a notificação. Selecionei meu nome de usuário aqui.

[[Atualização]] As etapas para criar um aplicativo Slack e um Webhook de entrada também são explicadas na documentação da API do Slack.

Depois de criar um Webhook de entrada, você será redirecionado para a página Incoming Webhooks. Na parte inferior desta página, você deverá ver o Webhook URL. Copie este URL.

5. Crie o arquivo de configuração Noti (se ainda não o tiver criado) e adicione Slack a ele

Agora que temos o URL do Slack Webhook, crie o arquivo de configuração Noti, chamado noti.yaml em ~/.config/noti/

Abra este arquivo com um editor de texto e cole o seguinte:

slack:  appurl: 'https://hooks.slack.com/services/xxx/yyy/zzz'

Aqui, substitua o valor appurl pelo URL do Slack Webhook que você obteve na etapa 4 e salve o arquivo.

Teste Noti enviando uma notificação do Slack quando um comando de longa execução terminar de ser executado usando:

Comandos para usar no terminal

sleep 3; noti --slack

Para usar sempre o Slack para enviar notificações ao digitar noti (para que você não precise digitar noti --slack toda vez que quiser ser notificado no Slack), você pode exportar NOTI_DEFAULT com uma lista de tipos de notificação para acionar, por exemplo, para usar notificações de banner na área de trabalho e notificações do Slack, você precisa exportar NOTI_DEFAULT="banner slack".

Adicione export NOTI_DEFAULT="banner slack" ao seu arquivo ~/.profile para tornar a alteração permanente. Obviamente, edite os tipos de notificação NOTI_DEFAULT de acordo com o que deseja usar. Efetue logout e login novamente após fazer alterações em seu arquivo ~/.profile para usar as novas configurações.

Confira a versão original desse post em inglês
Propaganda
Blog Comments powered by Disqus.
Propaganda