Короче говоря, Вы не должны волноваться об этом, как разделение инструментов было несколько исправленных годы назад для обработки этого. Также "Усовершенствованный Формат" не имеет никакого отношения к GPT; только необходимо использовать это для дисков> 2 тебибайта или если Вы используете UEFI. Windows не поддерживает GPT без UEFI.
Я считаю, что переключатель -k
просто имитирует, что система выключается, и поэтому напечатает сообщение на стене, но мало что делает.
-k
Don't halt, power-off, reboot, just write wall message.
Чтобы отменить событие выключения:
$ sudo shutdown -c
Когда я попытался использовать описанное выше в Ubuntu 12.04, я смог выполнить следующую команду:
$ sudo -i
$ strace -s 2000 -o sdown.log shutdown -k 23:00
Broadcast message from manny@manny
(/dev/pts/1) at 20:25 ...
The system is going down for maintenance in 155 minutes!
$ shutdown -c
shutdown: Cannot find pid of running shutdown
Просмотр журнала strace
файл, sdown.log
Я не видел ничего, что могло бы указывать на то, что это имело какое-либо влияние на фактическую блокировку входа в систему от пользователей.
$ grep open sdown.log
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libnih.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libnih-dbus.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libdbus-1.so.3", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/librt.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
open("/usr/share/locale/en_US.UTF-8/LC_MESSAGES/upstart.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_US.utf8/LC_MESSAGES/upstart.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_US/LC_MESSAGES/upstart.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.UTF-8/LC_MESSAGES/upstart.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.utf8/LC_MESSAGES/upstart.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en/LC_MESSAGES/upstart.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en_US.UTF-8/LC_MESSAGES/upstart.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en_US.utf8/LC_MESSAGES/upstart.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en_US/LC_MESSAGES/upstart.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en.UTF-8/LC_MESSAGES/upstart.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en.utf8/LC_MESSAGES/upstart.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en/LC_MESSAGES/upstart.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/localtime", O_RDONLY|O_CLOEXEC) = 3
open("/var/run/shutdown.pid", O_RDONLY) = -1 ENOENT (No such file or directory)
Поэтому я склонен думать, что страница руководства просто неверна в том смысле, что в ней говорится, что переключатель -k
отключает вход в систему.
Согласно комментарию, оставленному @Gilles, он направил нас к источнику shutdown.c
, в частности, с этого URL: http: // packages .ubuntu.com / trusty / admin / upstart . Утилита shutdown
в настоящее время является частью пакета Upstart в Ubuntu и CentOS.
Просматривая исходный код, ./ util / shutdown.c
обратите внимание, что файл, используемый для управления включением / отключением пользователей от входа в систему, это / etc / nologin
, как вы и подозревали. Запись в этот файл выполняется только функцией timer_callback ()
.Затем эта функция вызывается этим таймером в качестве обратного вызова:
/* Call a timer every minute until we shutdown */
NIH_MUST (nih_timer_add_periodic (NULL, 60,
(NihTimerCb)timer_callback,
message));
Внутри функции timer_callack ()
есть этот блок, который, по-видимому, записывает файл / etc / nologin
, когда есть До выключения осталось <5 минут:
/* Write /etc/nologin with less than 5 minutes remaining */
if (delay <= 5) {
FILE *nologin;
nologin = fopen (ETC_NOLOGIN, "w");
if (nologin) {
fputs (msg, nologin);
fclose (nologin);
}
}
Переключатель -k
отправляет предупреждение только 1 раз, а затем закрывается.
{ 'k', NULL, N_("only send warnings, don't shutdown"),
NULL, NULL, &warn_only, NULL },
Вот и выход:
if (warn_only)
exit (0);