Des fois c’est pratique de savoir quand une commande longue est terminée, ou que son gros téléchargement BitTorrent est fini, sans rester bêtement devant son terminal ou son download manager.

Pour dépanner on peut utiliser les mails, genre

/bin/long-cmd mail -s "long-cmd finie" user < /dev/null

mais c’est pas pratique, pas beau et pas toujours possible (et en plus faut lire ses mails régulièrement ce qui n’est pas mon cas).

https://gotify.net/

En gros Gotify c’est un serveur HTTP (en Go), et un client sous la forme d’une application Android (disponible sur F-Droid entre autre). Le serveur reçoit les messages à notifier à travers une interface REST, et les clients font du polling, ce qui peut consommer un peu de batterie vue que ça ne passe par par l’infrastructure Google.

Pas grand chose à signaler pour l’installation, j’ai mis le mien derrière un Nginx qui fait offloading SSL au passage. Le script FreeBSD de démarrage ressemble à ça:

#!/bin/sh

# PROVIDE: gotify
# KEYWORD: shutdown

command=/usr/sbin/daemon

. /etc/rc.subr

gotify_enable=${gotify_enable:-"NO"}
gotify_dir=${gotify_dir:-"/usr/local/gotify"}
gotify_user=${gotify_user:-"_gotify"}

name=gotify
load_rc_config "${name}"

pidfile=/var/run/gotify.pid
gotify_chdir=$gotify_dir

command_args="-P /var/run/${name}.pid -r -o /var/log/${name}.log -t ${name} bin/gotify-server"

required_files="${gotify_dir}/data/gotify.db"

stop_postcmd="echo Shuting-down Gotify"

run_rc_command "$1"

Il y a une CLI disponible pour créer des notifications en… ligne de commande. Pour ma part j’ai créé un script (stocké exécutable dans ~/bin/gotify):

#!/usr/bin/env sh
title=$1
message=$2
priority=$3
token=le_token_de_mon_application
/usr/local/bin/curl \
    -X POST "https://mon_serveur/gotify/message?token=$token" \
    -F "title=${title}" \
    -F "message=${message}" \
    -F "priority=${priority}"

Si je reprends mon exemple du début, ça donne:

/bin/long-cmd; gotify "long-cmd" "finie" 5

Pour Transmission j’ai un script spécifique qui est une petite adaptation du premier, pour prendre en compte la variable d’environnement qui contient le nom du torrent concerné:

#!/usr/bin/env sh
token=le_token_de_mon_application
/usr/local/bin/curl \
    -X POST "https://mon_serveur/gotify/message?token=$token" \
    -F "title=Transmission" \
    -F "message=${TR_TORRENT_NAME}" \
    -F "priority=5"

Le chemin vers ce script (à rendre exécutable) est défini dans la directive “script-torrent-done-filename” du fichier de configuration JSON de Transmission, par exemple là:

~/.config/transmission-daemon/settings.json