Comando para reiniciar a máquina quando nenhum usuário está logado?

0

Existe um comando para reinicializar uma máquina sempre que a próxima vez que não houver usuários atuais conectados ocorrerem?

Atualmente, eu tenho que usar SSH em máquinas e usar o comando "w" para ver os usuários logados, então eu sei se está tudo bem reiniciar ou não. Se houver um usuário conectado, simplesmente não posso reinicializá-lo porque ele pode ter um trabalho não salvo na caixa do Linux, o que geralmente é o caso. Isso pode consumir bastante tempo quando eu tiver que usar o SSH na mesma máquina várias vezes por semana, aguardando uma hora em que não haja usuários conectados.

Para simplificar, preciso do seguinte.

Um comando que reinicializará o computador quando nenhum usuário estiver conectado no momento.

    
por TrevorKS 05.01.2018 / 18:08

2 respostas

0

Isso deve ajudar ... mas não é um comando, mas um script curto. Eu acredito que não há comando para isso. É um script para uso com o cron, mas você pode executá-lo remotamente em suas máquinas, é claro.
Eu estou usando para reiniciar após as atualizações.

#!/bin/bash
#  Run this script as a cronjob at some suitable time in the PM, e.g. 10pm.
# Turns off workarea machine if no one is logged on, if someone is logged on
# then checks at 15 minute intervals until a set hour is reached.
# Must be used in conjuntion with the following BIOS settings:
# - Machine powers on in event of AC power being restored after loss
# - Machines turns itself on at a time at least 1 hour after the hour specified
# for $giveupat


# time to give up checking if anyone is logged on at. Specify as an hour on 
#24 clock  e.g. for 7am set to 07. for 7pm set to 19 (though you probably 
#do not want to specify a time in the evening!)
giveupat="07"



# while someone is logged in to the machine...
while [ -n "$(who)" ];do
   if [ "$(date +%H)" != "$giveupat" ];then
   # if time hasn't read the hour at which to give up, sleep 15 minutes
      sleep 900 
   else
     # otherwise stop the script
      exit
   fi
done


# turn off gui login screen
service xdm stop


# reboot
reboot now

Source: linuxquestions.org

    
por 05.01.2018 / 18:49
1

Se eu posso ser tão ousado para sugerir outra abordagem ...

Uma das coisas legais em ser root é que você decide coisas! Assim, em vez de esperar que os usuários não estivessem logados, eu definiria um horário fixo para reinicializar o sistema.

Existem amplos utilitários, como wall :

DESCRIPTION
       wall  displays  a  message, or the contents of a file, or otherwise its
       standard input, on the terminals of all currently logged in users. 

Para notificar os usuários logados de que haverá uma reinicialização, você pode dar tempo suficiente para salvar o trabalho deles e efetuar logout. Você também pode usar o comando shutdown :

sudo shutdown -r +10
Shutdown scheduled for Fri 2018-01-05 19:21:46 CET


Então, eu usaria algo assim:

#!/bin/bash

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

echo "Rebooting system shortly. Please save your work and log out" | wall

sleep 60

shutdown -r +10

Em seguida, execute-o (por exemplo) no primeiro dia de cada mês à meia noite com esta entrada crontab:

0 0 1 * * /usr/local/bin/reboot.sh >/dev/null 2>&1

Você pode, é claro, nomear seu roteiro como quiser e colocá-lo onde quiser. O acima é apenas um exemplo.

    
por 05.01.2018 / 19:12