jnotify监控linux系统,JNotify 的简单使用(Linux命令行环境)

下载地址:http://sourceforge.net/projects/jnotify/

关于JNotify的使用说明,从下载的jnotify-lib-0.94.zip中解压出的readme文件的前两行写的很清晰,如下:

JNotify works on Linux with INotify support (Tested on 2.6.14), Mac OS X 10.5 or higher (Tested on 10.6.2), and on Windows XP/2K/NT (Tested on XP and on Windows 7).

You can test run JNotify with the command:

java -Djava.library.path=. -jar jnotify-0.94.jar [directory]

which will monitor the specified directory or the current directory if not specified and output events to the console.

下面是我从net.contentobjects.jnotify.JNotify中取出的main函数,可以直接编译运行

import java.io.File;

import java.io.IOException;

import net.contentobjects.jnotify.JNotify;

import net.contentobjects.jnotify.JNotifyListener;

public class JNotifyTest {

public static void main(String[] args) throws InterruptedException, IOException

{

String dir = new File(args.length == 0 ? "." : args[0]).getCanonicalFile().getAbsolutePath();

JNotify.addWatch(dir, JNotify.FILE_ANY, true, new JNotifyListener()

{

public void fileRenamed(int wd, String rootPath, String oldName,

String newName)

{

System.out.println("renamed " + rootPath + " : " + oldName + " -> " + newName);

}

public void fileModified(int wd, String rootPath, String name)

{

System.out.println("modified " + rootPath + " : " + name);

}

public void fileDeleted(int wd, String rootPath, String name)

{

System.out.println("deleted " + rootPath + " : " + name);

}

public void fileCreated(int wd, String rootPath, String name)

{

System.out.println("created " + rootPath + " : " + name);

}

});

System.out.println("Monitoring " + dir/* + ", ctrl+c to stop"*/);

while (true) Thread.sleep(10000);

}

}

我是在Linux下使用的命令行进行操作的,运行上面的demo。运行前,将jnotify-0.94.jar和操作系统对应的动态链接库(我用的是64位的libjnotify.so)。运行时,会出现以下问题:

1.编译时找不到jnotify-0.94.jar中的类,可以设置classpath路径,也可以使用下面的命令行参数,进行编译:

javac -cp .:jnotify-0.94.jar JNotifyTest.java

-cp 后面不要忘加当前目录.

2.运行时,执行下面的命令:

java -cp .:jnotify-0.94.jar JNotifyTest

这时会报下面的错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no jnotify in java.library.path

这是因为程序运行时在动态链接库的搜索路径中找不到libjnotify.so(前面的lib是前缀,后面的.so是后缀),在bash下可以通过以下设置完成,

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.

3.动态链接库搜索路径设置成功以后,可能还会出现下面的问题:

Exception in thread "main" java.lang.UnsatisfiedLinkError: /usr/local/study/jnotify3/libjnotify.so: /lib64/libc.so.6: version `GLIBC_2.12' not found

这个问题在于系统的glibc库版本不是libjnotify.so编译时使用的版本,使用 rpm -qi glibc 查看系统的glibc库版本信息,在这里看到我的版本号是2.5,低于libjnotify.so编译时使用的版本2.12。

我的处理方法是在本机重新编译libjnotify.so,如下:

·首先将源代码中的以下三个文件拷贝到某一目录下

net_contentobjects_jnotify_linux_JNotify_linux.c inotify-syscalls.h net_contentobjects_jnotify_linux_JNotify_linux.h

·然后进行编译,如下

-bash-3.1$ gcc -I /usr/java/jdk1.6.0_45/include/ -I /usr/java/jdk1.6.0_45/include/linux/ -fPIC -g -c net_contentobjects_jnotify_linux_JNotify_linux.c -o libjnotify.o

-bash-3.1$ gcc -g -shared -W1 -o libjnotify.so libjnotify.o -lc

-bash-3.1$ ls

inotify-syscalls.h  libjnotify.so                                     net_contentobjects_jnotify_linux_JNotify_linux.h

libjnotify.o        net_contentobjects_jnotify_linux_JNotify_linux.c

这里要引入 jni 需要的库,而且版本要和操作系统相匹配。使用 uname -a 查看操作系统的版本,java -version 查看JDK版本。我这里操作系统和JDK都是64位版本。

此时可以正常使用libjnotify.so了。

正确的执行过程如下:

-bash-3.1$ ls

jnotify-0.94.jar JNotifyTest.java libjnotify.so

-bash-3.1$ javac -cp .:jnotify-0.94.jar JNotifyTest.java

-bash-3.1$ java -cp .:jnotify-0.94.jar JNotifyTest

-bash-3.1$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.

-bash-3.1$ java -cp .:jnotify-0.94.jar JNotifyTest

Monitoring /usr/local/study/jnotify3

下面是我参考的文章,感谢他们的分享

http://blog.csdn.net/qq160816/article/details/7679426

http://blog.csdn.net/force_eagle/article/details/8684669

http://blog.csdn.net/hmsiwtv/article/details/8197263

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值