名 前
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_loglevel を
minimum_console_loglevel に 設 定
す る 。 こ れ に
よ り 、 コ ン ソ
ー ル に メ ッ セ
ー ジ が 出 力 さ
れ な く な る 。 Linux
2.6.32 よ り 前 で は 、
こ の コ マ ン ド
は console_loglevel を
minimum_console_loglevel に 設 定
す る だ け で あ
っ た 。 下 記 の
/proc/sys/kernel/printk の 議 論
を 参 照 。 引 き
数 bufp と len は 無
視 さ れ る 。
SYSLOG_ACTION_CONSOLE_ON (7) 直 前 に
SYSLOG_ACTION_CONSOLE_OFF コ マ ン
ド が さ れ た 場
合 、 こ の コ マ
ン ド は console_loglevel を
前 の コ マ ン ド
が 保 存 し た 値
に 戻 す 。 Linux 2.6.32 よ
り 前 で は 、 こ
の コ マ ン ド は
単 に console_loglevel を
default_console_loglevel に 設 定
す る だ け で あ
っ た 。 下 記 の
/proc/sys/kernel/printk の 議 論
を 参 照 。 引 き
数 bufp と len は 無
視 さ れ る 。
SYSLOG_ACTION_CONSOLE_LEVEL (8)
console_loglevel を len で 指 定 さ れ た 値 に 設 定 す る 。 len は 1 以 上 8 以 下 の 整 数 で な け れ ば な ら な い 。 カ ー ネ ル に よ り 、 暗 黙 の う ち に len に minimum_console_loglevel で 指 定 さ れ る 最 小 値 が 適 用 さ れ る 。 詳 細 は 「 ロ グ レ ベ ル 」 の 節 を 参 照 の こ と 。 引 き 数 bufp は 無 視 さ れ る 。
SYSLOG_ACTION_SIZE_UNREAD
(9) (Linux 2.4.10 以 降 ) コ マ
ン ド 2 (SYSLOG_ACTION_READ) で
カ ー ネ ル ロ グ
バ ッ フ ァ ー か
ら 読 み 出 せ る
バ イ ト 数 を 返
す 。 引 き 数 bufp
と len は 無 視 さ
れ る 。
SYSLOG_ACTION_SIZE_BUFFER (10) (Linux 2.6.6 以
降 ) カ ー ネ ル ロ
グ バ ッ フ ァ ー
の 全 体 の サ イ
ズ を 返 す 。 引
き 数 bufp と len は
無 視 さ れ る 。
コ マ ン ド 種 別 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_ADMIN も CAP_SYSLOG も 持 た な い プ ロ セ ス ) が console_loglevel を 変 更 し よ う と し た か 、 カ ー ネ ル メ ッ セ ー ジ リ ン グ を 消 去 し よ う と し た 。
ERESTARTSYS シ ス テ ム コ ー ル が シ グ ナ ル に よ っ て 割 り 込 ま れ 、 何 も 読 み 出 せ な か っ た 。 (ト レ ー ス 中 に し か 発 生 す る こ と は な い )
準 拠
こ の シ ス テ ム コ ー ル は Linux 特 有 で あ り 、 移 植 を 意 図 し た プ ロ グ ラ ム で は 使 用 し て は い け な い 。
注 意
か な り 初 期 の 頃 か ら 、 同 じ 名 前 を 持 つ シ ス テ ム コ ー ル と ラ イ ブ ラ リ ル ー チ ン が 全 く 異 な る 別 物 で あ る の は 不 幸 な こ と だ と 指 摘 さ れ て き た 。
関 連 項 目
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。