SFTP不再输出‘Uploading...’消息求助(Informatica 10迁移后)
我之前处理过好几起Informatica版本升级后SFTP日志输出异常的情况,结合你的脚本和描述,大概率是这几个原因导致的,给你梳理下:
可能的原因及解决思路
1. SFTP客户端版本或默认行为变更
Informatica 10可能内置了更新版本的OpenSSH/sftp客户端,新版本在**批处理模式(-b参数)**下默认关闭了上传成功的提示输出。旧版本的sftp可能会自动输出"Uploading
解决方法:
在sftp命令中添加-v(verbose)参数,强制开启详细日志输出,这样就能恢复上传成功的提示信息。修改后的命令如下:
sftp -v -b $DIR/$SFTP_CMD $USER@$SERVER >> $LOG
如果觉得-v输出太啰嗦,可以查看对应sftp版本的文档,找更精准的输出级别控制参数。
2. Informatica工作流的输出捕获逻辑变化
迁移到Informatica 10后,工作流运行的环境可能调整了标准输出/错误的捕获规则。比如之前能捕获sftp的stdout,但现在可能只捕获stderr;或者脚本执行的用户权限变化,导致$LOG文件没有写入权限,消息根本没存进去。
解决方法:
- 检查
$LOG路径的权限,确保运行脚本的用户有读写权限; - 修改输出重定向,把stderr也合并到日志里,避免消息丢失:
sftp -b $DIR/$SFTP_CMD $USER@$SERVER >> $LOG 2>&1
3. 批处理模式下的输出抑制
部分sftp版本在使用-b批处理模式时,会刻意抑制成功类的提示消息,只保留错误日志。这种情况下,即使客户端版本没换,也可能因为Informatica对批处理命令的调用方式变化触发了这个行为。
解决方法:
既然依赖sftp客户端的输出不稳定,不如自己在脚本里手动添加日志记录。比如在生成SFTP命令脚本后,或者在sftp执行完成后,显式往日志里写入上传成功的消息:
# 在put命令后手动追加日志 echo "Uploading $FTP_FILE_NAME to $DEST/$FTP_FILE_NAME(+1)" >> $LOG # 或者在sftp执行完成后判断返回值再写入 if [ $? -eq 0 ]; then echo "Successfully uploaded $FTP_FILE_NAME to $USER@$SERVER:$DEST/$FTP_FILE_NAME(+1)" >> $LOG fi
这种方式更可靠,不受sftp客户端版本或Informatica环境的影响。
总结
优先尝试给sftp命令加-v参数,看看是否能恢复原有输出;如果不行,就手动添加日志记录,确保上传状态能被追踪。另外,也可以直接在Informatica工作流里添加日志任务,不用依赖shell脚本的输出,这样迁移时更稳定。
内容的提问来源于stack exchange,提问作者Koshur

