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


人力没有记录是因为修改方法不对。你一定是将ZKDB.db下载编辑后再上传了,这样是无效的。因为考勤机内和数据库关联的进程没有结束,上传覆盖原文件后数据库文件的inode会变,对于程序来讲,找不到inode等于数据库被删除了,所有新的考勤数据都放在了程序缓存中,并且读不到数据库中修改后的数据内容。
“Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。”
所以,解决方案是在telnet现场用sqlite3_mips直接修改ZKDB.db,这时候inode不变,程序缓存和数据库内容永远是同步的。
有必要多说一点的是: 自上传覆盖ZKDB.db后,考勤信息就只能全部放在程序缓存中了,如果考勤机重启了,缓存中的新考勤数据将全部丢失,务必留意。最好等月初人力考勤后自己将考勤机重启下(reboot命令),以免后患。最安全的办法是你先用考勤软件连接4370端口,将缓存中的数据下载下来,然后重启考勤机,检查数据完整性,将丢失的数据添加回去。
人力没有记录是因为修改方法不对。你一定是将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这个表里也有,后来我两个表都手动添加了记录,但是在考勤系统中,还是没有记录, 我初步怀疑是不是指纹打卡的时候硬件触发了某种上报机制。
我明白你的意思了,并且你的怀疑是正确的。人力如果一直将考勤软件保持运行状态,并设置了轮询时间,物理打卡时会自动上报到软件中,而数据库的直接编辑并不会上报。如果人力月初点击“从设备下载记录数据”,那么数据库中的信息是会更新到考勤软件中的,但如果人力完全依赖设备上报,就比较麻烦了
-------补充------- 可以自己安装一个软件,尝试抓包并分析,模拟上报过程,但细节我没有研究过。
我明白你的意思了,并且你的怀疑是正确的。人力如果一直将考勤软件保持运行状态,并设置了轮询时间,物理打卡时会自动上报到软件中,而数据库的直接编辑并不会上报。如果人力月初点击“从设备下载记录数据”,那么数据库中的信息是会更新到考勤软件中的,但如果人力完全依赖设备上报,就比较麻烦了
-------补充------- 可以自己安装一个软件,尝试抓包并分析,模拟上报过程,但细节我没有研究过。
是的,后来我确实想尝试用tcpdump 抓包来试试,但是考勤机的环境实在是太简陋,也没有多余的时间去折腾了。
我补充一句,考勤系统的数据一般情况并不是实时去考勤机上拉取的。你注意下这个问题。另外考勤机上也可能有Web界面来查询考勤记录,这个就是实时的。
我补充一句,考勤系统的数据一般情况并不是实时去考勤机上拉取的。你注意下这个问题。另外考勤机上也可能有Web界面来查询考勤记录,这个就是实时的。
这个也是我觉得奇怪的地方,原理上不应该是实时的,但是数据在人力哪里就是没有,或者是他们的服务器上做了什么特别的设置,对这种方式上报的数据不予接受?我扫过服务器,无奈水平有限,进不去。 另外,在设备上是没有开放80端口的,也就是没有启用web,看起来都是集中管理的。我没有修改配置文件启用web,不想改动配置,避免给公司查到了,就不好了。
我补充一句,考勤系统的数据一般情况并不是实时去考勤机上拉取的。你注意下这个问题。另外考勤机上也可能有Web界面来查询考勤记录,这个就是实时的。
这个也是我觉得奇怪的地方,原理上不应该是实时的,但是数据在人力哪里就是没有,或者是他们的服务器上做了什么特别的设置,对这种方式上报的数据不予接受?我扫过服务器,无奈水平有限,进不去。 另外,在设备上是没有开放80端口的,也就是没有启用web,看起来都是集中管理的。我没有修改配置文件启用web,不想改动配置,避免给公司查到了,就不好了。
我这边也是...修改了并没有任何反应