ERROR: could not lock RRD

rrdtoolを使って手動でアップデートをかけようとおもったが、なぜだかエラーをはかれる。

%./src/rrdtool update test.rrd N

ERROR: could not lock RRD

しょうがないのでソースを落としてきて追跡。

該当の箇所は

src/rrd_update.c

if (rrd_lock(rrd_file) != 0) {
rrd_set_error(“could not lock RRD”);
goto err_close;
}

このへんらしい。

rrd_loclをたどってみたけど、rrd_fileがファイルディスクリプタでfcntをれをぽい投げして終わりらしい。

fcntlって見たことあったけどよくわかんなくってman

最初は戻り値見てたけど、エラー時は-1を返してerrnoとかいうやつにエラー番号が格納されるらしい。

#include <errno.h>

char erromsg[50];
extern int errno;

sprintf(erromsg, “%s: %d”, “could not lock RRD”, errno);
rrd_set_error(erromsg);

適当に出力させる。

%./src/rrdtool update test.rrd N
ERROR: could not lock RRD: 45
%grep 45 /usr/include/errno.h
#define EOPNOTSUPP      45              /* Operation not supported */

うーん・・・、結局わかんなかったけど久しぶりにC触って意外に触れるんだって言う後書きとしておこう。

コメントを残す