Manpages

名 前

syslog, klogctl − カ ー ネ ル の メ ッ セ ー ジ リ ン グ バ ッ フ ァ ー を 読 ん だ り 消 去 し た り す る ; console_loglevel の 設 定 を 行 う

書 式

int syslog(int type, char *bufp, int len);
/* glibc で は ラ ッ パ ー 関 数 は 提 供 さ れ て い な い */

/* glibc の イ ン タ ー フ ェ ー ス */
#include <sys/klog.h>

int klogctl(int type, char *bufp, int len);

説 明

注 意 : お そ ら く 、 あ な た が 探 し て い る の は 、 syslogd(8) と 通 信 す る C ラ イ ブ ラ リ 関 数 の syslog() で し ょ う 。 詳 細 は syslog(3) を 参 照 の こ と 。 こ の ペ ー ジ は カ ー ネ ル の syslog() シ ス テ ム コ ー ル に つ い て 説 明 し て い る 。 syslog() シ ス テ ム コ ー ル は カ ー ネ ル の printk() バ ッ フ ァ ー を 制 御 す る た め に 使 用 さ れ る 。 こ の シ ス テ ム コ ー ル に 対 す る glibc ラ ッ パ ー 関 数 は klogctl() と 呼 ば れ て い る 。 カ ー ネ ル ロ グ バ ッ フ ァ ー (kernel log buffer) カ ー ネ ル は 長 さ LOG_BUF_LEN の 巡 回 式 の バ ッ フ ァ ー を 持 っ て お り 、 そ れ に は カ ー ネ ル 関 数 の printk() の 引 き 数 と し て 与 え ら れ た メ ッ セ ー ジ が (そ の ロ グ レ ベ ル に か か わ ら ず ) 格 納 さ れ る 。 初 期 の カ ー ネ ル で は LOG_BUF_LEN の 値 は 4096 で あ っ た 。 カ ー ネ ル 1.3.54 か ら は 8192、 カ ー ネ ル 2.1.113 か ら は 16384 に な り 、 カ ー ネ ル 2.4.23 以 降 お よ び 2.6 以 降 で は カ ー ネ ル 設 定 オ プ シ ョ ン (CONFIG_LOG_BUF_SHIFT、 デ フ ォ ル ト 値 は ア ー キ テ ク チ ャ ー 依 存 ) で 値 を 設 定 で き る よ う に な っ て い る 。 Linux 2.6.6 以 降 で は 、 コ マ ン ド 10 (下 記 参 照 ) で バ ッ フ ァ ー の サ イ ズ を 問 い 合 わ せ で き る 。 コ マ ン ド

type 引 き 数 は こ の 関 数 が 行 う 動 作 を 決 定 す る 。 以 下 の リ ス ト に 示 す 値 を type に 指 定 で き る 。 シ ン ボ ル 名 は カ ー ネ ル ソ ー ス で 定 義 さ れ て い る が 、 ユ ー ザ ー 空 間 に は 公 開 さ れ て い な い 。 し た が っ て 、 数 字 を 使 う か 、 名 前 を 自 分 で 定 義 す る 必 要 が あ る 。
SYSLOG_ACTION_CLOSE
(0) ロ グ を ク ロ ー ズ す る 。 現 在 の と こ ろ NOP で あ る 。
SYSLOG_ACTION_OPEN
(1) ロ グ を オ ー プ ン す る 。 現 在 の と こ ろ NOP で あ る 。
SYSLOG_ACTION_READ
(2) ロ グ を 読 み 出 す 。 こ の 呼 び 出 し は 、 カ ー ネ ル ロ グ バ ッ フ ァ ー が 空 で な く な る ま で 待 っ て 、 最 大 len バ イ ト ま で bufp が 指 す バ ッ フ ァ ー に 読 み 込 み 、 読 み 込 ん だ バ イ ト 数 を 返 す 。 ロ グ か ら 読 ま れ た バ イ ト は ロ グ バ ッ フ ァ ー か ら 消 え る 。 つ ま り 、 情 報 は 一 度 し か 読 む こ と が で き な い 。 こ れ は ユ ー ザ ー の プ ロ グ ラ ム が /proc/kmsg を 読 ん だ 時 に カ ー ネ ル に よ っ て 実 行 さ れ る 関 数 で も あ る 。
SYSLOG_ACTION_READ_ALL
(3) リ ン グ バ ッ フ ァ ー に 残 っ て い る メ ッ セ ー ジ を す べ て 読 み 出 し 、 bufp が 指 す バ ッ フ ァ ー に 格 納 す る 。 こ の 呼 び 出 し ロ グ バ ッ フ ァ ー の 最 後 の len バ イ ト を (非 破 壊 的 に ) 読 み 出 す が 、 最 後 の 「 リ ン グ バ ッ フ ァ ー 消 去 」 命 令 (下 記 の コ マ ン ド 5 参 照 ) 以 降 に バ ッ フ ァ ー に 書 き 込 ま れ た 情 報 し か 読 み 出 せ な い 。 返 り 値 は 読 み 込 ん だ バ イ ト 数 で あ る 。
SYSLOG_ACTION_READ_CLEAR
(4) リ ン グ バ ッ フ ァ ー に 残 っ て い る メ ッ セ ー ジ を す べ て 読 み 出 し 、 ク リ ア す る 。 こ の 呼 び 出 し は type 3 と 全 く 同 じ こ と を 行 い 、 追 加 で 「 リ ン グ バ ッ フ ァ ー 消 去 」 ("clear ring buffer") コ マ ン ド も 実 行 す る 。
SYSLOG_ACTION_CLEAR
(5) 「 リ ン グ バ ッ フ ァ ー 消 去 」 ( は 無 視 さ れ る 。 こ の コ マ ン ド は 実 際 に リ ン グ バ ッ フ ァ ー を ク リ ア す る わ け で は な く 、 コ マ ン ド 3 (SYSLOG_ACTION_READ_ALL) と 4 (SYSLOG_ACTION_READ_CLEAR で 返 す 内 容 を 決 定 す る カ ー ネ ル の 管 理 変 数 を 設 定 す る 。 こ の コ マ ン ド は コ マ ン ド 2 (SYSLOG_ACTION_READ) と 9 (SYSLOG_ACTION_SIZE_UNREAD) に は 影 響 を 与 え な い 。
SYSLOG_ACTION_CONSOLE_OFF
(6) こ の コ マ ン ド は console_loglevel の 現 在 の 値 を 保 存 し 、 そ れ か ら console_loglevelminimum_console_loglevel に 設 定 す る 。 こ れ に よ り 、 コ ン ソ ー ル に メ ッ セ ー ジ が 出 力 さ れ な く な る 。 Linux 2.6.32 よ り 前 で は 、 こ の コ マ ン ド は console_loglevelminimum_console_loglevel に 設 定 す る だ け で あ っ た 。 下 記 の /proc/sys/kernel/printk の 議 論 を 参 照 。 引 き 数 bufplen は 無 視 さ れ る 。
SYSLOG_ACTION_CONSOLE_ON
(7) 直 前 に SYSLOG_ACTION_CONSOLE_OFF コ マ ン ド が さ れ た 場 合 、 こ の コ マ ン ド は console_loglevel を 前 の コ マ ン ド が 保 存 し た 値 に 戻 す 。 Linux 2.6.32 よ り 前 で は 、 こ の コ マ ン ド は 単 に console_logleveldefault_console_loglevel に 設 定 す る だ け で あ っ た 。 下 記 の /proc/sys/kernel/printk の 議 論 を 参 照 。 引 き 数 bufplen は 無 視 さ れ る 。
SYSLOG_ACTION_CONSOLE_LEVEL
(8)

console_loglevellen で 指 定 さ れ た 値 に 設 定 す る 。 len は 1 以 上 8 以 下 の 整 数 で な け れ ば な ら な い 。 カ ー ネ ル に よ り 、 暗 黙 の う ち に lenminimum_console_loglevel で 指 定 さ れ る 最 小 値 が 適 用 さ れ る 。 詳 細 は 「 ロ グ レ ベ ル 」 の 節 を 参 照 の こ と 。 引 き 数 bufp は 無 視 さ れ る 。

SYSLOG_ACTION_SIZE_UNREAD (9) (Linux 2.4.10 以 降 ) コ マ ン ド 2 (SYSLOG_ACTION_READ) で カ ー ネ ル ロ グ バ ッ フ ァ ー か ら 読 み 出 せ る バ イ ト 数 を 返 す 。 引 き 数 bufplen は 無 視 さ れ る 。
SYSLOG_ACTION_SIZE_BUFFER
(10) (Linux 2.6.6 以 降 ) カ ー ネ ル ロ グ バ ッ フ ァ ー の 全 体 の サ イ ズ を 返 す 。 引 き 数 bufplen は 無 視 さ れ る 。 コ マ ン ド 種 別 3 と 10 以 外 の コ マ ン ド は 全 て 特 権 が 必 要 で あ る 。 バ ー ジ ョ ン 2.6.37 よ り 前 の Linux カ ー ネ ル で は 、 コ マ ン ド 種 別 3 と 10 は 非 特 権 プ ロ セ ス も 呼 び 出 す こ と が で き る 。 Linux 2.6.37 以 降 で は 、 /proc/sys/kernel/dmesg_restrict が 値 0 の 場 合 に 限 り 、 非 特 権 プ ロ セ ス は こ れ ら の コ マ ン ド を 呼 び 出 す こ と が で き る 。 Linux 2.6.37 よ り 前 で は 、 「 特 権 を 持 つ (privileged)」 と は 呼 び 出 し 者 が CAP_SYS_ADMIN ケ ー パ ビ リ テ ィ を 持 つ こ と を 意 味 す る 。 Linux 2.6.37 以 降 で は 、 「 特 権 を 持 つ 」 と は 呼 び 出 し 者 が CAP_SYS_ADMIN ケ ー パ ビ リ テ ィ か (新 し い ) CAP_SYSLOG ケ ー パ ビ リ テ ィ の い ず れ か を 持 つ こ と を 意 味 す る (こ の 目 的 で CAP_SYS_ADMIN ケ ー パ ビ リ テ ィ を 使 う の は 今 は 非 推 奨 で あ る )。

/proc/sys/kernel/printk
/proc/sys/kernel/printk
は 書 き 込 み 可 能 な フ ァ イ ル で 、 エ ラ ー メ ッ セ ー ジ の ロ グ 出 力 を 行 う 際 に カ ー ネ ル の printk() の 動 作 に 影 響 を 持 つ 4 つ の 整 数 値 が 入 っ て い る 。 4 つ の 値 は 以 下 の と お り で あ る 。
console_loglevel
メ ッ セ ー ジ の ロ グ レ ベ ル が こ の 値 よ り も 小 さ い 場 合 の み 、 メ ッ セ ー ジ だ け が コ ン ソ ー ル に 出 力 さ れ る 。 こ の フ ィ ー ル ド の デ フ ォ ル ト 値 は DEFAULT_CONSOLE_LOGLEVEL (7) だ が 、 カ ー ネ ル の コ マ ン ド ラ イ ン に "quiet" と い う 単 語 が 含 ま れ て い る 場 合 は 4 に 設 定 さ れ 、 "debug" と い う 単 語 が 含 ま れ て い る 場 合 は 10 に 設 定 さ れ 、 カ ー ネ ル フ ォ ー ル ト が 発 生 し た 場 合 に は 15 に 設 定 さ れ る (但 し 、 10 や 15 と い う 数 字 に 意 味 は な く 、 8 と 同 等 で あ る )。 console_loglevel の 値 は type が 8 の syslog() の 呼 び 出 し に よ っ て 設 定 で き 、 設 定 で き る 値 の 範 囲 は 1−8 で あ る 。
default_message_loglevel
こ の 値 は 、 明 示 的 に ロ グ レ ベ ル が 指 定 さ れ て い な い printk() メ ッ セ ー ジ の ロ グ レ ベ ル と し て 使 用 さ れ る 。 Linux 2.6.38 以 前 で は 、 こ の フ ィ ー ル ド の デ フ ォ ル ト 値 は 4 (KERN_WARNING) に ハ ー ド コ ー ド さ れ て い た 。 Linux 2.6.39 以 降 で は 、 デ フ ォ ル ト 値 は カ ー ネ ル の 設 定 オ プ シ ョ ン CONFIG_DEFAULT_MESSAGE_LOGLEVEL で 定 義 さ れ て お り 、 デ フ ォ ル ト 値 は 4 で あ る 。
minimum_console_loglevel
こ の フ ィ ー ル ド の 値 は console_loglevel に 設 定 で き る 最 小 値 で あ る 。
default_console_loglevel

console_loglevel の デ フ ォ ル ト 値 で あ る 。 ロ グ レ ベ ル す べ て の printk() メ ッ セ ー ジ に は そ れ ぞ れ ロ グ レ ベ ル が あ る 。 ロ グ レ ベ ル が メ ッ セ ー ジ の 一 部 と し て 明 示 的 に 指 定 さ れ な か っ た 場 合 は 、 ロ グ レ ベ ル は default_message_loglevel に な る 。 ロ グ レ ベ ル の 一 般 的 な 意 味 は 以 下 の と お り で あ る 。

カ ー ネ ル の printk() ル ー チ ン は 、 メ ッ セ ー ジ の ロ グ レ ベ ル が console_loglevel よ り も 小 さ い 値 の 場 合 に の み 、 メ ッ セ ー ジ を コ ン ソ ー ル に 出 力 す る 。

返 り 値

type が 2, 3, 4 の 場 合 、 成 功 す る と syslog() は 読 み 出 し た バ イ ト 数 を 返 す 。 type が 9 の 場 合 、 カ ー ネ ル ロ グ バ ッ フ ァ ー に あ る 現 在 読 み 出 し 可 能 な バ イ ト 数 を 返 す 。 type が 10 の 場 合 、 カ ー ネ ル ロ グ バ ッ フ ァ ー の 総 量 を 返 す 。 type が そ れ 以 外 の 値 の 場 合 、 成 功 す る と 0 が 返 さ れ る 。 エ ラ ー の 場 合 は 、 −1 が 返 り 、 errno に エ ラ ー を 示 す 値 が 設 定 さ れ る 。

エ ラ ー

EINVAL 不 正 な 引 き 数

(具 体 的 に は 、 type が 正 し く な い 、 も し く は type

2, 3, 4 の 場 合 に buf が NULL か len が 0 未 満 で あ る 、 も し く は type が 8 の 場 合 に level が 1 以 上 8 以 下 の 範 囲 に 入 っ て い な い )。

ENOSYS カ ー ネ ル の 設 定 オ プ シ ョ ン

CONFIG_PRINTK を 無 効 に し て カ ー ネ ル が コ

ン パ イ ル さ れ て い る た め 、 syslog() シ ス テ ム コ ー ル が 利 用 で き な い 。

EPERM 十 分 な 権 限 を 持 た な い プ ロ セ ス

(正 確 に は ケ ー パ ビ リ テ ィ

CAP_SYS_ADMINCAP_SYSLOG も 持 た な い プ ロ セ ス ) が console_loglevel を 変 更 し よ う と し た か 、 カ ー ネ ル メ ッ セ ー ジ リ ン グ を 消 去 し よ う と し た 。

ERESTARTSYS シ ス テ ム コ ー ル が シ グ ナ ル に よ っ て 割 り 込 ま れ 、 何 も 読 み 出 せ な か っ た 。 (ト レ ー ス 中 に し か 発 生 す る こ と は な い )

準 拠

こ の シ ス テ ム コ ー ル は Linux 特 有 で あ り 、 移 植 を 意 図 し た プ ロ グ ラ ム で は 使 用 し て は い け な い 。

注 意

か な り 初 期 の 頃 か ら 、 同 じ 名 前 を 持 つ シ ス テ ム コ ー ル と ラ イ ブ ラ リ ル ー チ ン が 全 く 異 な る 別 物 で あ る の は 不 幸 な こ と だ と 指 摘 さ れ て き た 。

関 連 項 目

syslog(3), capabilities(7)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。