ログインしたユーザーがいないときにコンピュータを再起動するコマンド?

ログインしたユーザーがいないときにコンピュータを再起動するコマンド?

次に、現在ユーザーがログインしていないときにコンピュータを再起動するコマンドはありますか?

現在は、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年遅れました。 Google経由で見つけました。

ワンライナーファン用です。のため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

Ubuntu 16.04.6でテストされました。


今、あなたの質問に答えます。

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

ログインしているユーザーが2人未満の場合は再起動してください。

完璧ではありませんが、誰かに役立ちます。

Ubuntu 20.04.1でテストされました。

答え3

私があまりにも大胆に別のアプローチを提案することができれば…

存在の最も素晴らしい点の1つ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

もちろん、必要に応じてスクリプトに名前を付けて好きな場所に配置することもできます。上記は単なる例です。

関連情報