Une place pour une véritable innovation. Partagez vos propres utilitaires créés avec la communauté Manjaro.
Questions et discussions sur la programmation et le codage.
Répondre

[bash] journalctl interactif

#1Messageil y a 7 ans

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)

[bash] journalctl interactif

#2Messageil y a 5 ans

Ç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:

[bash] journalctl interactif

#3Messageil y a 5 ans

: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 ....
Répondre