Eu montei um pequeno script que você poderia executar em um cronjob a cada 15 minutos ou usando temporizadores systemd:
#/bin/bash
NActiveUsers=$(who -q | awk -F'#' '{printf }' | awk -F'=' '{printf }')
AvgLoad15Min=$(cat /proc/loadavg | awk -F' ' '{print }')
ActiveUsersThresh=2
AvgLoadThresh=0.15
if [ "$NActiveUsers" -lt "$ActiveUsersThresh" ]
then
LoadBelowThresh=$(echo $AvgLoad15Min'<'$AvgLoadThresh | bc -l)
if [ "$LoadBelowThresh" -eq 1 ]
then
systemctl hibernate
fi
fi
Primeiro, obtém o número de usuários que estão conectados ao sistema e a carga média durante os últimos 15 minutos. Você deve ser capaz de descobrir sua carga de sistema médio inativa usando cat /proc/loadavg
. O terceiro número de ponto flutuante indica a média nos últimos 15 minutos. Esse valor é útil para definir um limite definido na variável AvgLoadThresh
. Isso certamente precisará de ajuste.
A outra coisa que você pode definir é quanto os usuários têm permissão para efetuar login e o sistema vai para a hibernação de qualquer maneira. Isso é definido em ActiveUsersThresh
. Apenas para garantir que o sistema nem sempre esteja em hibernação quando você estiver fazendo manutenção ou algo assim.
Eu acho que alguém poderia chegar a verificações mais inteligentes, então veja isso como uma primeira abordagem simplista. Por exemplo, não sei qual banco de dados ou servidor da Web é usado em sua instalação do owncloud, mas você pode tentar interrompê-los normalmente antes do comando de hibernação, para que ninguém perca a conexão de repente.