No conozco una manera de hacer esto sin sondear algún tipo de estadísticas del sistema, como las otras respuestas usan un protector de pantalla o un temporizador inactivo bash, o se ejecutan desde .bash_logout, pero aquí hay una idea para verificar el uso de la CPU.
Esto aún implicaría sondear cada n segundos, y si el uso de su CPU está por debajo de la cantidad que elija, entonces puede escribir lo que quiera ejecutar. Sin embargo, lo que sea que ejecute podría aumentar el uso de la CPU, pero podría usar bien sus "cosas" para no contarlo.
Aquí hay un script de prueba que usa top, pero ¿podrías usar mpstat en su lugar o verificar los promedios de carga?
while true
do
idle=$(top -bn2 | grep "Cpu(s)"|tail -n 1|sed "s/.*, *\([0-9.]*\)%* id.*/\1/")
echo "idle is $idle"
if [[ $idle > 90 ]]
then
echo "idle above 90%"
echo "Do stuff now"
else
echo "idle below 90%"
echo "Stop doing stuff now"
fi
sleep 1
done
Ese es solo un guión que elaboré para probar leer el inactivo desde arriba. Podría analizar, /proc/stat
pero creo que solo muestra los tiempos totales, y necesitaría comparar los resultados en un intervalo. Top tiene su propio problema para mí (Linux mint 16), en la primera ejecución parece que nunca cambia los cpustats, como si tuviera que esperar para analizar / proc / stat en sí mismo, por lo tanto, top -bn2
pero en teoría top -bn1
debería funcionar.