Page 1 sur 1

[bash] journalctl interactif

Publié : 08 fév 2017, 16:36
par papajoke
Puisque les options de journalctl sont obscures pour la plupart voici un petit script qui permet de faire des filtres dans journald en mode interactif.

fichier journaldi (chmod 755)

#!/usr/bin/env bash
pkgname='journaldi'
version=0.1.0
#set -x
# journalctl interactif

lg=$(locale 2>/dev/null | awk -F'=' '/^LANG/ {print $2}')   
case "${lg:0:2}" in
    fr) ask='o/N';;
    de) ask='j/N';;
    es) ask='s/N';;
    *)  ask='y/N'
esac

yesno()
{
    declare prompt="${1:-'Entrer une valeur :'}"
    read -n 1 -p "${prompt} [${ask:0:3}]" REPLY </dev/tty
    REPLY="${REPLY,,}"
    echo
    case "${REPLY:0:1}" in
        "${ask:0:1}") return 0 ;;
        *) return 1 ;;
    esac
}

service=''
if yesno "Chercher un service ?"; then
    read -p "nom du service : " service_name </dev/tty
    service='-u'
    [ -n "${service_name}" ] && service='-t'
else
    read -p "ou un programme : " service_name </dev/tty
    [ -n "${service_name}" ] && service='-t'
fi


levels=("urgency" "alert" "critical" "error" "warning" "notice" "information" "debug")
if yesno "Filtrer les erreurs ?"; then
    read -p "level  (${levels[*]}) [error(3)]: " level </dev/tty
    [ -z "${level}" ] && level="3"
    [ -n "${level}" ] && level="-p $level "
fi


if yesno "Uniquement le boot actuel ?"; then
    boot='-b'
else
    read -p "depuis XX jours [1..99] : " days </dev/tty
    [ -n "${days}" ] && days="--since=-${days}d"
fi

echo -e "\033[0m\033[32m::\033[0m journalctl ${boot} ${service} ${service_name} ${level}${days}"
journalctl ${boot} ${service} ${service_name} ${level}${days}


On peut étendre la commande journalctl et lui ajouter l'option -i
Ajouter dans son fichier .bashrc

__journalctl() {
    if [[ "$@" = "-i" ]]; then
        journaldi
        else
        journalctl "$@"
    fi
}
alias journalctl='__journalctl'

maintenant nous pouvons faire un "simple" journalctl -i

résultat:

journalctl -i                                                       
Chercher un service ? [o/N]o
nom du service : sudo
Filtrer les erreurs  ? [o/N]o
level  (urgency alert critical error warning notice information debug) [error(3)]: 3
Uniquement le boot actuel  ? [o/N]n
depuis XX jours [1..99] : 1
:: journalctl  -t sudo -p 3 --since=-1d
-- Logs begin at Wed 2016-11-16 22:25:37 CET, end at Wed 2017-02-08 15:48:36 CET. --
févr. 07 22:15:43 HPmachine sudo[3662]:  patrick : a password is required ; TTY=pts/0 ; PWD=/tmp/yaour
févr. 07 23:38:55 HPmachine sudo[10239]:  patrick : a password is required ; TTY=pts/0 ; PWD=/home/pat
-- Reboot --
févr. 08 07:17:48 HPmachine sudo[5057]:  patrick : a password is required ; TTY=pts/0 ; PWD=/home/patr
févr. 08 11:34:00 HPmachine sudo[12929]:  patrick : a password is required ; TTY=pts/0 ; PWD=/home/pat
févr. 08 11:50:50 HPmachine sudo[20464]:  patrick : a password is required ; TTY=pts/0 ; PWD=/home/pat
lines 1-7/7 (END)

Re: [bash] journalctl interactif

Publié : 10 jui 2018, 22:56
par Bimbada
Ça fait longtemps que je me dis faudra penser à passer dire merci un jour.
Alors ça y est le jour J est arrivé Merci @papajoke pour ce bout de code bien sympathique
:wink:

Re: [bash] journalctl interactif

Publié : 11 jui 2018, 01:31
par lemust83
:bjr:
Intéressant! :bien
Juste un truc qui me chiffonne un peu.

alias journalctl='__journalctl'
Normalement, on évite de mettre en alias une commande appelée directement comme journalctl afin d'éviter les conflits avec la commande originale.
Je pense qu'on devrait nommer l'alias autrement. Par exemple : Journalctl='__journalctl'. Mais je suis conscient que ce n'est pas le but de ton script qui a pour but de faciliter cette commande franchement absconse . Le fait de viser une fonction non prévue par les devs de systemd est ne devrait pas poser de problème dans cet alias , mais je m’interroge ....