로그인한 사용자가 없을 때 컴퓨터를 다시 시작하는 명령?

로그인한 사용자가 없을 때 컴퓨터를 다시 시작하는 명령?

다음에 현재 사용자가 로그인되어 있지 않을 때 컴퓨터를 다시 시작하는 명령이 있습니까?

현재는 SSH를 통해 시스템에 로그인하고 "w" 명령을 사용하여 누가 로그인했는지 확인해야 재부팅할 수 있는지 알 수 있습니다. 사용자가 로그인하면 재부팅할 수 없습니다. Linux 상자에 아직 저장되지 않은 작업이 있을 수 있기 때문입니다. 이는 흔한 일입니다. 일주일에 여러 번 동일한 시스템에 SSH로 접속하여 로그인한 사용자가 없을 때까지 기다려야 한다면 이는 매우 시간이 많이 걸릴 수 있습니다.

이를 매우 간단하게 만들려면 다음이 필요합니다.

현재 로그온한 사용자가 없을 때 컴퓨터를 다시 시작하는 명령입니다.

답변1

도움이 되겠지만 명령이 아니라 짧은 스크립트입니다. 그런 순서는 없다고 생각합니다. 이것은 cron과 함께 사용하기 위한 스크립트이지만 물론 컴퓨터에서 원격으로 실행할 수도 있습니다.
업데이트 후 재부팅할 때 사용합니다.

#!/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

출처: linuxquestions.org

답변2

거의 3년이나 늦었습니다. 구글을 통해 찾았습니다.

원 라이너 팬을위한 것입니다. 을 위한 sudo crontab -e:

26 */3 * * * [ -z "$(/usr/bin/who)" ] && /sbin/reboot

로그인한 사람이 없으면 3시간 26분마다 다시 시작됩니다( who빈/0 문자열 반환).

https://blog.eduonix.com/shell-scripting/understanding-test-conditions-in-linux-shell-scripting/

which who절대 경로를 사용하거나 알아보세요 which reboot.

우분투 16.04.6에서 테스트되었습니다.


이제 귀하의 질문에 답변해 드리겠습니다.

[ "$(who | awk '{print $1}' | sort | uniq | wc -l)" -lt 2 ] && reboot

로그인한 사용자가 2명 미만인 경우 다시 시작하세요.

완벽하지는 않지만 누군가에게 도움이 될 수 있습니다.

우분투 20.04.1에서 테스트되었습니다.

답변3

제가 너무 대담하게 다른 접근법을 제안할 수 있다면…

존재의 가장 멋진 점 중 하나 root실제로 상황을 결정할 수 있습니다! 그래서 사용자가 로그인하지 않을 때까지 기다리는 대신 시스템을 재부팅하는 고정된 시간을 설정했습니다.

다음과 같은 다양한 유틸리티가 있습니다 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. 

로그인한 사용자에게 다시 시작된다는 사실을 알리려면 작업 내용을 저장하고 로그아웃할 수 있는 충분한 시간을 주어야 합니다. shutdown명령 자체를 사용할 수도 있습니다 .

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


그래서 나는 다음과 같은 것을 사용할 것입니다 :

#!/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

그런 다음 예를 들어 다음 crontab 항목을 사용하여 매월 1일 자정에 실행합니다.

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

물론 원하는 대로 스크립트 이름을 지정하고 원하는 곳에 배치할 수 있습니다. 위의 내용은 단지 예시일 뿐입니다.

관련 정보