¿Cómo leer la columna "IDLE" en la salida del comando 'w' de Linux?

11

Estoy tratando de descubrir un proceso que supervise las sesiones de los usuarios en un servidor remoto y les avise cuando estén inactivas demasiado tiempo, lo que con el comando de Linux wes apropiado.

El problema es que wusa 3 formatos diferentes para especificar el tiempo de inactividad de la sesión, y no puedo resolverlos correctamente. Una salida de wpodría verse así:

 11:40:57 up 400 days, 10:46, 13 users,  load average: 5.07, 5.10, 4.83
USER     TTY      FROM           LOGIN@   IDLE   JCPU   PCPU WHAT
john     pts/1    XX.XX.XX.XX   Wed13   22:29m  0.13s  0.04s ssh master-db
june     pts/2    XX.XX.XX.XX   Wed13   46.00s  0.67s  0.13s -bash
jenn     pts/4    XX.XX.XX.XX   11:13   27:47   4.16s  0.11s -bash

Como puede ver, IDLE tiene diferentes formatos para cada uno de los usuarios:

  • "AA.BBs" obviamente significa que han pasado AA segundos y BB 1/100 de segundo (46 segundos en el caso de junio) desde la última vez que estuvo activa en la consola.
  • "AA: BBm" probablemente significa que han pasado horas AA y minutos BB desde que John estuvo activo por última vez en su sesión.
  • "AA: BB" es el formato que no puedo entender: ¿cuánto tiempo lleva Jennifer sin estar activa en su sesión?
Guss
fuente

Respuestas:

4

Sin un calificador, significa MM: SS, es decir, minutos y segundos completos. Como beneficio adicional, hay un cuarto formato que no tiene en esa salida: una cantidad de días (NNdays) de inactividad.

womble
fuente
10

Desde la página del manual

El formato estándar es DDdays, HH: MMm, MM: SS o SS.CC si los tiempos son superiores a 2 días, 1 hora o 1 minuto respectivamente.

entonces su salida es MM: SS (> 1m y <1 hora).

usuario9517
fuente
1

No es exactamente la respuesta a su pregunta, pero un enfoque más fácil para verificar el tiempo de inactividad de las sesiones de inicio de sesión sería mirar / dev / pts. Los tiempos de modificación de los archivos allí reflejan la última vez que la sesión de inicio de sesión recibió información.

Debería poder realizar operaciones estadísticas allí (por ejemplo, stat --format = "% n% X" *) y mantener todo en segundos de época. Debería facilitar los cálculos de tiempo.

cjc
fuente
1
Si se encuentra analizando formatos de tiempo, es posible que desee buscar una fuente de esa marca de tiempo en el tiempo de época.
cjc
1
Leí algo sobre eso, pero me di cuenta de que los tiempos de inactividad informados por wson diferentes de las marcas de tiempo en los /dev/ptsarchivos. alguna idea de por qué?
Guss
¿En qué contexto es diferente? No he mirado esto cuidadosamente, pero "w" debe estar sacando la información de algún lugar, y / dev / pts es un lugar obvio. Ah, tal vez si algo sucede en la pantalla (/ dev / pts / * debería ser comunicación bidireccional); en ese caso, el usuario estaría inactivo, pero, debido a que algo pasa por el dispositivo, / dev / pts / 0, por ejemplo, se actualizaría.
cjc
Esa es una explicación probable, y anulará mi esquema, porque quiero cerrar las sesiones inactivas incluso si el usuario está siguiendo algún archivo de registro activo o está usando watch.
Guss
1

La respuesta es 27 minutos y 47 segundos.

  1. El formato predeterminado es MM: SS.
  2. 22: 29m significa 22 horas y 29 minutos
  3. 46.00s significa 46 segundos
  4. 4d significa 4 días
Kexin Z
fuente