最近安装了OCS Inventory NG 和GLPI 来盘点计算机信息,完全部署后一直有个头疼的问题困扰我,就是每天会发现自动多出来很多重复的计算机,于是在网上找原因,但是并没有发现什么有用的信息。

网页CONFIG 里面的 AUTO_DUPLICATE_LVL 里也正确设置了匹配项,就是不自动合并。

不过最后还是自己搞定了,下面记录一下我解决问题的过程。
1.z-ocsinventory-server.conf 里面打开日志(APACHE日志),还有OCS网页里也开启日志功能(管理页面LOGLEVEL = On)。
PerlSetEnv OCS_OPT_DBI_PRINT_ERROR 1

2. 查看日志发现有几处错误关于自动处理duplicate
/var/log/ocsinventory-server/activity.log

Wed Mar 28 12:04:01 2018;2917;517;PC-2018-03-28-11-58-21;182.168.100.94;OCS-NG_WINDOWS_AGENT_v2.3.1.1;duplicate;replacing_error

3. 查看具体replacing_erro到底是什么原因造成,这里要去看apache的日志。

cat /var/log/httpd/error_log

DBD::mysql::db do failed: Column ‘DATE’ cannot be null at /usr/local/share/perl5/Apache/Ocsinventory/Server/Duplicate.pm line 270.

这证明是写数据库的时候DATE字段不能为空

4.思路有了,程序我们就不改了,直接把数据库字段准许为空试试看。
打开Duplicate.pm 找到270行,看看它到底要写到哪个表。
# Trace duplicate if needed
if($ENV{‘OCS_OPT_TRACE_DELETED’}){
unless( $dbh->do(‘INSERT INTO deleted_equiv(DATE,DELETED,EQUIVALENT) VALUES(NULL,?,?)’, {} , $device,$DeviceID)){
&_unlock($device);
return(1);
}
}

5.原来是要给deleted_equiv里添加记录不成功。

于是乎把这个表的所有字段都准许为空并设置varchar类型。(包括Date字段)

6,观察了一会儿日志,发现错误没有了,我居然成功了。
Wed Mar 28 12:59:38 2018;2986;300;PC1-2018-03-28-12-52-43;192.168.100.154;OCS-NG_WINDOWS_AGENT_v2.3.1.1;duplicate;488 => 524
Wed Mar 28 14:06:40 2018;2986;300;PC2-2018-03-28-14-02-54;192.168.100.190;OCS-NG_WINDOWS_AGENT_v2.3.1.1;duplicate;521 => 525

自动合并了重复记录,这样以后再也不用手动再去合并这些记录了。

发表回复