#51 Le 08/10/2013, à 12:28
- Crestey
Re : [Résolu] Impossible d'afficher un message avec cron
Merci infiniment tiramiseb.
Le mieux étant l'ennemi du bien, je crois que je vais en rester là.
A+
Merci à tous.
Sous Ubuntu/XFCE depuis 2013. Ça fonctionne vraiment très bien.
Hors ligne
#52 Le 09/10/2013, à 20:45
- Crestey
Re : [Résolu] Impossible d'afficher un message avec cron
Juste pour dire que le script pour lequel j'avais besoin d'afficher un message depuis root par cron est ci-dessous.
Je l'ai testé et mis en place. Tout semble bien marcher même si le code est sans doute perfectible.
Merci à vous tous et surtout tiramiseb.
P.S.1 Le script a été tiré de là. (il n'affichait pas de message et nécessitait quelques retouche pour tourner sous Ubuntu).
Le script permet de faire une limitation horaire sur des sessions (2h/jour le W.E. et 1h/jour en semaine).
5 minutes avant, l'utilisateur est prévenu toute les minutes par un message popup (d'où ce fil) qu'il va être déconnecté dans x minutes.
Puis il est déconnecté, et ne peut se reconnecter que le lendemain.
#! /bin/bash
# Script max_temps
# Ptyxs - février 2008
# export DISPLAY=:0.0
# export XAUTHORITY=/home/crestey/.Xauthority
# liste des utilisateurs à quotas, l'admin devra tenir cette liste à jour
USERS_RESTREINTS="sophie thomas"
# début du chemin du fichier-compteur
PREFIXE="/root/max_temps"
# durée maximum de connexion autorisée le week-end d'une part en semaine de l'autre
if [ $(date "+%a") = 'dim.' -o $(date "+%a") = 'sam.' ] ; then
LIMITE=120
else
LIMITE=60
fi
for login in $USERS_RESTREINTS ; do
FICHIER="${PREFIXE}_${login}_$(date "+%d%m%Y")"
# nettoyage : on supprime tout fichier-compteur de login d'une date antérieure
for fich in ${PREFIXE}_${login}_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] ; do
if [ "$fich" != "$FICHIER" ]; then
rm -f "$fich"
fi
done
# si le fichier-compteur du jour n'existe pas on le crée et on l'initialise à zéro et on réactive le compte
if [ ! -e "$FICHIER" ] ; then
echo 0000 > $FICHIER
usermod --unlock "$login"
fi
done
for login in $USERS_RESTREINTS ; do
# le fichier-compteur du jour qui totalisera la durée d'utilisation effective de l'ordi
# pour chaque utilisateur (login) pour la journée en cours (date)
FICHIER="${PREFIXE}_${login}_$(date "+%d%m%Y")"
FICHIERtmp="${PREFIXE}_tmp"
for en_ligne in $(users) ; do
# si login est un utilisateur connecté sur cette machine
if [ "$login" == "$en_ligne" ]; then
cat $FICHIER | gawk '{ $1 += 1 } END { print $1 }' > $FICHIERtmp
cp $FICHIERtmp $FICHIER
# message d'alerte
if [ "$(cat $FICHIER)" -ge "$[LIMITE-5]" ]; then
DISPLAY0=$(who | grep tty7 | cut -f1 -d' ')
DISPLAY1=$(who | grep tty8 | cut -f1 -d' ')
DISPLAY2=$(who | grep tty9 | cut -f1 -d' ')
DISPLAY3=$(who | grep tty10 | cut -f1 -d' ')
if [ -n "$DISPLAY0" ]; then
if [ "$DISPLAY0" == "$login" ]; then
DISPLAY=:0 sudo -u $DISPLAY0 /usr/bin/notify-send "$DISPLAY0 : déconnexion dans $[LIMITE-$(cat $FICHIER)]mn"
fi
fi
if [ -n "$DISPLAY1" ]; then
if [ "$DISPLAY1" == "$login" ]; then
DISPLAY=:1 sudo -u $DISPLAY1 /usr/bin/notify-send "$DISPLAY1 : déconnexion dans $[LIMITE-$(cat $FICHIER)]mn"
fi
fi
if [ -n "$DISPLAY2" ]; then
if [ "$DISPLAY2" == "$login" ]; then
DISPLAY=:2 sudo -u $DISPLAY2 /usr/bin/notify-send "$DISPLAY2 : déconnexion dans $[LIMITE-$(cat $FICHIER)]mn"
fi
fi
if [ -n "$DISPLAY3" ]; then
if [ "$DISPLAY3" == "$login" ]; then
DISPLAY=:3 sudo -u $DISPLAY3 /usr/bin/notify-send "$DISPLAY3 : déconnexion dans $[LIMITE-$(cat $FICHIER)]mn"
fi
fi
fi
fi
# si la limite est atteinte on arrête la machine
if [ "$(cat $FICHIER)" -ge "$LIMITE" ] ; then
# skill -KILL -u "$login"
killall -9 -u "$login" -r
usermod --lock "$login"
# /usr/bin/halt
fi
done
done
exit 0
Merci à tous.
Sous Ubuntu/XFCE depuis 2013. Ça fonctionne vraiment très bien.
Hors ligne