これは、 -k
(少なくともUbuntuでは)のman shutdown
オプションのドキュメントです。
-k Only send out the warning messages and disable
logins, do not actually bring the system down.
私は当初、これがpam_nologin
を使用してログインをロックアウトすると想定していました。ただし、テストしたところ、/etc/nologin
の実行後にshutdown -k
が作成されていません。
shutdown -k
はどのようにログインを無効にしますか?shutdown -k
の後にログインを再度有効にするにはどうすればよいですか?_-k
_スイッチは、システムがシャットダウンしていることを偽って、ウォールメッセージを出力すると思いますが、それ以外はほとんど実行しません。
_ -k
Don't halt, power-off, reboot, just write wall message.
_
シャットダウンイベントをキャンセルするには:
_$ Sudo shutdown -c
_
上記をUbuntu12.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
_スイッチがログインを無効にするという言い回しのようにmanページが単に間違っていると思う傾向があります。
@Gillesが残したコメントによると、彼は_shutdown.c
_のソース、具体的には次のURLから私たちに指示しました: http://packages.ubuntu.com/trusty/admin/upstart 。 shutdown
ユーティリティは、現在UbuntuとCentOSのUpstartパッケージの一部です。
ソースを見ると、_./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()
関数内から、シャットダウンするまでの残り時間が5分未満の場合、_/etc/nologin
_ファイルを書き込むように見えるこのブロックがあります。
_ /* 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);
_