Reboot

一旦完成搜尋以查看沒有人登錄,我想重新啟動系統

  • December 5, 2014

我正在開發一個使用者菜單,這樣當使用者登錄時,他們得到的就是這個菜單;此菜單上是重新啟動選項的選擇。如果沒有人登錄,我希望其中一個選項重新啟動系統。

我希望進行搜尋以查看是否有人登錄。我認為這將是一個好的開始:

# who | wc 

如果答案是 0 個使用者,我希望系統重新啟動。**注意:**我知道這不會是因為使用者使用菜單登錄。

除了訪問菜單的使用者外,我如何確定是否沒有其他使用者登錄?

這似乎是您正在尋找的。我看到的問題是,總會有至少 1 個使用者登錄,即訪問菜單的使用者,所以當使用者數為 1 時,您正在尋找。

$ who | awk '{print $1}' | sort -u | wc -l
1

這將輸出who並刪除第一列,即使用者名,然後對其進行唯一排序,然後對其進行計數。

但IMO,它比這更複雜一些。例如,以這種方式查看情況會忽略此使用者是否有任何登錄的 SSH 會話。所以你可能想檢查上面的輸出是否who指定它只是:0設備或者是否有任何pts/#類型的行。

例子

# represents the login for the user's desktop on display :0
saml     :0           2014-12-01 01:56 (:0)

# represents user's terminals or SSH connections
saml     pts/0        2014-12-01 01:57 (:0)

**注意:**請注意該pts/0行如何顯示它與哪個顯示器關聯,“:0”。

所以這樣的事情似乎更合適:

num_pts=$(who | grep 'pts/' | wc -l)
num_usr=$(who | awk '{print $1}' | sort -u | wc -l)

if [ $num_pts -eq 0 ] && [ $num_usr -eq 1 ]; then echo "OK to logout";fi

例子

這是一個模擬執行,我有 2 個帳戶登錄:

$ who
saml     :0           2014-12-01 01:56 (:0)
saml     pts/0        2014-12-01 01:57 (:0)
saml     pts/1        2014-12-01 02:13 (:0)
saml     pts/2        2014-12-03 04:22 (:0)
saml     pts/3        2014-12-05 08:14 (:0)
samtest  pts/4        2014-12-05 08:14 (localhost)

手動執行命令會產生以下結果:

$ echo $num_usr
2
$ echo $num_pts
5
$ if [ $num_pts -eq 0 ] && [ $num_usr -eq 1 ]; then echo "OK to logout";fi
$

但是,如果我手動設置 2 個變數來模擬我已登錄到“:0”並且沒有打開終端:

$ num_usr=1
$ num_pts=0
$ if [ $num_pts -eq 0 ] && [ $num_usr -eq 1 ]; then echo "OK to logout";fi
OK to logout

這可以濃縮,只是為了向您展示一種方法。

引用自:https://unix.stackexchange.com/questions/171635