pyscripts icon indicating copy to clipboard operation
pyscripts copied to clipboard

我在ZKDB.db里插入了信息,但是还是没有记录

Open keivenliao opened this issue 6 years ago • 7 comments

我在ZKDB.db里插入了考勤信息,但是人事那边是没有记录的,你有遇到这样的情况吗?

tim 20190218170316

tim 20190218170103

keivenliao avatar Feb 18 '19 09:02 keivenliao

人力没有记录是因为修改方法不对。你一定是将ZKDB.db下载编辑后再上传了,这样是无效的。因为考勤机内和数据库关联的进程没有结束,上传覆盖原文件后数据库文件的inode会变,对于程序来讲,找不到inode等于数据库被删除了,所有新的考勤数据都放在了程序缓存中,并且读不到数据库中修改后的数据内容。

“Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。”

所以,解决方案是在telnet现场用sqlite3_mips直接修改ZKDB.db,这时候inode不变,程序缓存和数据库内容永远是同步的。

有必要多说一点的是: 自上传覆盖ZKDB.db后,考勤信息就只能全部放在程序缓存中了,如果考勤机重启了,缓存中的新考勤数据将全部丢失,务必留意。最好等月初人力考勤后自己将考勤机重启下(reboot命令),以免后患。最安全的办法是你先用考勤软件连接4370端口,将缓存中的数据下载下来,然后重启考勤机,检查数据完整性,将丢失的数据添加回去。

ror-ian avatar Mar 29 '19 04:03 ror-ian

人力没有记录是因为修改方法不对。你一定是将ZKDB.db下载编辑后再上传了,这样是无效的。因为考勤机内和数据库关联的进程没有结束,上传覆盖原文件后数据库文件的inode会变,对于程序来讲,找不到inode等于数据库被删除了,所有新的考勤数据都放在了程序缓存中,并且读不到数据库中修改后的数据内容。

“Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。”

所以,解决方案是在telnet现场用sqlite3_mips直接修改ZKDB.db,这时候inode不变,程序缓存和数据库内容永远是同步的。

有必要多说一点的是: 自上传覆盖ZKDB.db后,考勤信息就只能全部放在程序缓存中了,如果考勤机重启了,缓存中的新考勤数据将全部丢失,务必留意。最好等月初人力考勤后自己将考勤机重启下(reboot命令),以免后患。最安全的办法是你先用考勤软件连接4370端口,将缓存中的数据下载下来,然后重启考勤机,检查数据完整性,将丢失的数据添加回去。

抱歉,是我没有表达清楚,是ZKDB.DB里有记录了,但是公司的考勤系统里没有记录,我是直接telnet 上去执行的sqlite3_mips添加的记录,同时,我发现不仅在ATT_LOG中有记录,在MESSAGE_QUEUE这个表里也有,后来我两个表都手动添加了记录,但是在考勤系统中,还是没有记录, 我初步怀疑是不是指纹打卡的时候硬件触发了某种上报机制。

keivenliao avatar Mar 29 '19 05:03 keivenliao

我明白你的意思了,并且你的怀疑是正确的。人力如果一直将考勤软件保持运行状态,并设置了轮询时间,物理打卡时会自动上报到软件中,而数据库的直接编辑并不会上报。如果人力月初点击“从设备下载记录数据”,那么数据库中的信息是会更新到考勤软件中的,但如果人力完全依赖设备上报,就比较麻烦了

-------补充------- 可以自己安装一个软件,尝试抓包并分析,模拟上报过程,但细节我没有研究过。

ror-ian avatar Mar 29 '19 05:03 ror-ian

我明白你的意思了,并且你的怀疑是正确的。人力如果一直将考勤软件保持运行状态,并设置了轮询时间,物理打卡时会自动上报到软件中,而数据库的直接编辑并不会上报。如果人力月初点击“从设备下载记录数据”,那么数据库中的信息是会更新到考勤软件中的,但如果人力完全依赖设备上报,就比较麻烦了

-------补充------- 可以自己安装一个软件,尝试抓包并分析,模拟上报过程,但细节我没有研究过。

是的,后来我确实想尝试用tcpdump 抓包来试试,但是考勤机的环境实在是太简陋,也没有多余的时间去折腾了。

keivenliao avatar Mar 29 '19 06:03 keivenliao

我补充一句,考勤系统的数据一般情况并不是实时去考勤机上拉取的。你注意下这个问题。另外考勤机上也可能有Web界面来查询考勤记录,这个就是实时的。

linsir avatar Mar 30 '19 03:03 linsir

我补充一句,考勤系统的数据一般情况并不是实时去考勤机上拉取的。你注意下这个问题。另外考勤机上也可能有Web界面来查询考勤记录,这个就是实时的。

这个也是我觉得奇怪的地方,原理上不应该是实时的,但是数据在人力哪里就是没有,或者是他们的服务器上做了什么特别的设置,对这种方式上报的数据不予接受?我扫过服务器,无奈水平有限,进不去。 另外,在设备上是没有开放80端口的,也就是没有启用web,看起来都是集中管理的。我没有修改配置文件启用web,不想改动配置,避免给公司查到了,就不好了。

keivenliao avatar Apr 02 '19 01:04 keivenliao

我补充一句,考勤系统的数据一般情况并不是实时去考勤机上拉取的。你注意下这个问题。另外考勤机上也可能有Web界面来查询考勤记录,这个就是实时的。

这个也是我觉得奇怪的地方,原理上不应该是实时的,但是数据在人力哪里就是没有,或者是他们的服务器上做了什么特别的设置,对这种方式上报的数据不予接受?我扫过服务器,无奈水平有限,进不去。 另外,在设备上是没有开放80端口的,也就是没有启用web,看起来都是集中管理的。我没有修改配置文件启用web,不想改动配置,避免给公司查到了,就不好了。

我这边也是...修改了并没有任何反应

liangl2000 avatar Oct 21 '20 07:10 liangl2000