1 votes

Bash pour surveiller les sessions

Je cherche à écrire un BASH pour contrôler la durée des sessions du nom d'utilisateur donné connectées. Voici ce que j'ai fait jusqu'à présent. Je veux que cela fonctionne pour n'importe quel utilisateur

( lastlog awk ' {print $1 } ' | tail -n +2)
do
NOW=$(date +%s)
USR=$(lastlog | awk '( print $1, $5, $6, $9 )' | grep $U)
USRDATE=$(echo $USR | cut -d":" -f2)
(( USRDATE = $(date --date ""$USRDATE" +%s) / 86400 ))
(( NOW = NOW / 86400 ))
(( DAYS = NOW - USRDATE ))
echo "The user $U: logged in $DAYs days ago"
done

1voto

Mufaka Points 54

Je sauterais complètement le lastlog et regarderais le who commande. Cela fait pratiquement tout ce que vous demandez :

$ who
oli      tty7         2013-09-20 14:33 (:0)
oli      pts/0        2013-09-20 14:33 (:0)
oli      pts/2        2013-09-21 22:00 (:0)
oli      pts/4        2013-09-25 20:09 (:0)
oli      pts/5        2013-09-24 11:02 (:0)

w est assez bon aussi, mais l'heure de connexion est un peu plus familière et ne convient donc pas aussi bien à l'écriture de scripts :

$ w
 20:13:15 up 5 days,  5:39,  5 users,  load average: 0.49, 0.53, 0.45
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
oli      tty7     :0               Fri14    5days  8:35m  0.03s /bin/sh /usr/bin/startkde
oli      pts/0    :0               Fri14    5days  0.00s  3:36  kdeinit4: kded4 [kdeinit]                      
oli      pts/2    :0               Sat22    3days  0.08s  0.08s /bin/bash
oli      pts/4    :0               20:09    3.00s  0.08s  0.00s w
oli      pts/5    :0               Tue11    5:45m  2:42   2:42  node /usr/bin/grunt watch

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X