Anyshare-使用 recycle_file.py 脚本回收 failed object 文件到回收站时,提示错误信息:You have an error in your SQL syntax
关键字
recycle_file.py
适用产品
- AnyShare 5.0.x
- AnyShare 6.0.x
问题描述
在执行扫描损坏文件脚本 get_failed_obj.py 后生成有 get_failed_obj_result.log 结果文件,其中是脚本扫描出的丢失或损坏的一些文件记录。然后执行第 2 步:
python ./recycle_file.py
将损坏的文件移至回收站并生成相应文件,执行过程中断并出现如下错误:
You have an error in your SQL syntax;

问题影响
无法正常执行完脚本,完成将损坏的文件移至回收站的步骤。
问题原因
原因是 get_failed_obj_result.log 文件中有特殊字符的文件名,导致 mysql 语句语法错误,无法正常执行。
解决方案
为解决该问题,需要编辑 recycle_file.py 脚本文件,增加显示错误信息语句,请按照以下步骤执行:
1. 通过 SSH 工具登录 AnyShare 节点,执行以下语句:
vi recycle_file.py
2. 按 ↓ 键切换至 eofscursor.execute(SQL % version_id ) 行,在行首缩进四个空格,然后按 O 进入编辑模式,添加 try: 后,按两次↓ 回车开启新行,添加如下内容,然后按 Esc 键,然后输入 :wq 保存退出。
except Exception as e:
print ("execute %s sqlcommand error on %s" % (SQL, version_id))
sys.exit(1)
print ("execute %s sqlcommand error on %s" % (SQL, version_id))
sys.exit(1)
添加后效果如图:

3. 重新执行脚本 recycle_file.py ,此时会输出具体的错误信息。

4. 使用 vi 编辑 get_failed_obj_result.log 文件,定位到含特殊字符的行,删除后重新执行脚本。
更多信息
Anyshare 中文件名称在 Windows 环境和 Linux 环境之间传递,某些 Windows 中的特殊文件名称符号,无法在 Linux 数据库中使用,不符合数据库的语法规则,因此会出现类似这种报错。