關機命令:如果時間等於或大於 16 分鐘,為什麼不向所有登錄使用者廣播“牆消息”?
關於
man shutdown
在:它表明:
... The first argument may be a time string (which is usually "now"). Optionally, this may be followed by a wall message to be sent to all logged-in users before going down. ... Note that to specify a wall message you must specify a time argument, too. ...
請注意,這篇文章是關於要向所有登錄使用者廣播的牆消息。
因此使用以下模式如下:
shutdown <time> ["something to share"]
其中
<time>
可以是 +1, … +5, … +15,因此從+1
to+15
範圍- 它如下:shutdown +1 ["something to share"] ... shutdown +5 ["something to share"] ... shutdown +15 ["something to share"]
我可以確認登錄的其他使用者接收 - 出現在他們的
tty
- 廣播消息中(根據情況包括或不包括自定義消息)。因此,正如文件所示,消息是廣播的。直到這裡沒有理由創建這個文章。情況:原因,我確實意識到 - 如果
<time>
等於或大於16分鐘 - 通過其中一個使用或者消息不會廣播給他們的. 例如,如果命令返回,那麼就會發生這種情況。當然,如果使用的話,一切都會按預期工作。+16``hh:mm``tty``date``00:10``shutdown 00:26 ...``shutdown 00:15
問題
- 如果時間等於或大於 16 分鐘,為什麼不向所有登錄使用者廣播牆消息?- 這是正常的還是錯誤的?
通過
man shutdown
或者shutdown --help
理論上必須始終向所有登錄使用者廣播牆消息, “從現在” +15、+20 等的時間範圍無關緊要……注意我在許多虛擬機中都有這種情況 - 對於不同的主機 - 對於 Ubuntu Server 20.04
該資訊隱藏在以下
systemd
來源中src/login/logind-utmp.c
:如果還剩不到 15 分鐘,則立即發出警告(當命令執行時):
/* Warn immediately if less than 15 minutes are left */ if (elapse - n < 15 * USEC_PER_MINUTE) { r = warn_wall(m, n); if (r == 0) return 0; }
至於其他時間何時發出警告,它是在行動前可能剩餘分鐘數的固定列表:
static const int wall_timers[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 25, 40, 55, 70, 100, 130, 150, 180, };
因此,例如,如果您執行(
-k
假冒):shutdown -k +41 test; sleep 62; shutdown -c
您將在 1 百萬後看到廣播關閉消息,並在 2 秒後將其取消。使用
-k +40
不會立即發送消息。的 systemd 變體
shutdown(8)
僅告訴:可選地,這可能會在關閉之前發送一條牆消息,以發送給所有登錄的使用者。
它沒有記錄在命令執行或在關閉之前重複(即使是)時將發送此類消息,只是將在 down 之前發送。
相比之下,sysvinit
shutdown
的文件記錄不同,希望實現遵循文件:
-q
減少警告關機顯示的數量。通常關機每 15 分鐘顯示一次警告,然後在倒計時的最後 10 分鐘內每分鐘顯示一次警告,直到時間到。何時
-q
指定關閉僅在 60 分鐘間隔、10 分鐘標記、5 分鐘標記以及關閉過程實際發生時發出警告。