EDI系统与SAP系统集成中可能会因为一些特殊原因导致SAP系统与EDI系统连接断开,但是两个系统彼此都未收到断开的日志,常常到数据发送失败时才紧急处理,并且通常是SAP推送数据到EDI系统失败,EDI系统推送数据到SAP系统没有问题,这种情况通常很难排查具体的原因,针对此问题我们的运维团队提供了一个定时重启知行之桥中IDoc Server的解决方案,用来避免此类问题的发生。同时我们的开发团队也即将将该功能加入到产品中,在下一个知行之桥的网站版本上将支持通过简单配置来实现重启IDoc Server。本文将介绍如何在EDI服务器设置定时任务重启IDoc Server,和知行之桥新版本中如何进行配置重启IDoc Server。
设置定时任务
EDI服务器为Windows服务器
1.准备好重启IDoc Server的两个脚本,一个名为restartIDocServers.rst,一个名为restartIDocServers.js,脚本参考如下:
restartIDocServers.rst脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<rsb:try> <rsb:call op="portListPorts" out="port"> <rsb:if exp="[port.porttype | def | tolower | equals('idoc')]"> <rsb:try> <h3>[port.portid]</h3> <rsb:call op="portSetPort" in="port" /> Restart IDoc server succeed! <rsb:set attr="_log.info" value="\[[port.portid]\] Restart IDoc server succeed." /> <rsb:catch code="*"> <rsb:set attr="_response.statuscode" value="500" /> Restart IDoc server failed, [_code]: [_description] - [_details] <rsb:set attr="error.Message" value="\[[port.portid]\] Restart IDoc server failed, [_code]: [_description] - [_details]" /> <rsb:set attr="error.Subject" value="Restart IDoc Server failed" /> <rsb:set attr="_log.error" value="error.Message" /> <rsb:call op="appSendEmail" in="error" /> </rsb:catch> </rsb:try> </rsb:if> </rsb:call> <rsb:catch code="*"> <rsb:set attr="_response.statuscode" value="500" /> [_code]: [_description] - [_details] <rsb:set attr="_log.error" value="[_code]: [_description] - [_details]" /> </rsb:catch> </rsb:try> |
restartIDocServers.js脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
var TIMEOUT = 90000; var URL = "http://localhost:8001/pub/restartIDocServers.rst"; //URL中:http://localhost:8001,需要设置为实际使用的IP(域名):端口 if (WScript.Arguments.Length >= 1) { URL = WScript.Arguments.Item(0) } function sendErrorEmail(errMsg) { try { var objShell = WScript.CreateObject ("WScript.shell"); var cmd = "RSSBus.exe appSendEmail -Subject \"Restart IDoc Server failed\" -Message \"" + errMsg + "\" -@libdir www\\bin\""; objShell.Run(cmd); } catch (err) { } } try { var objHttpRequest = new ActiveXObject("WinHttp.WinHttpRequest.5.1"); objHttpRequest.Open('GET', URL, false); objHttpRequest.SetTimeouts(0, TIMEOUT, TIMEOUT, TIMEOUT); objHttpRequest.Send(); var status = objHttpRequest.Status switch (status) { case 200: break; default: var errMsg= "Status: " + status + " - " + objHttpRequest.StatusText + "\n" + objHttpRequest.ResponseText; sendErrorEmail(errMsg) } WScript.Quit(status); } catch (err) { sendErrorEmail(err.message) WScript.Quit(-1); } |
2.将restartIDocServers.rst 文件放在安装目录下的www/pub文件夹中(www下没有pub目录的时,手动创建pub目录)。
3.将restartIDocServers.js 文件放在安装目录下,与www平级,需要改脚本中的url路径,改为实际的IP和端口:http(s)://IP(域名):端口/pub/restartIDocServers.rst
4.在Windows中任务计划程序中设置自动重启任务:
Task Scheduler–Create Task–设置定时任务名称
定时任务设置:
①Triggers(触发器)
设置为每天定时执行该任务,建议设置每天凌晨0点执行,可以根据实际业务数据传输情况,在没有业务数据的时间点进行重启。
②Actions(操作)
- Add arguments(potional):这里配置的是js文件目录,要注意使用双引号,参考:”E:\C-ArcESBCN\ArcCN_8336\restartIDocServers.js”
- Start in(potional):这里设置的是知行之桥安装根目录,参考:E:\C-ArcESBCN\ArcCN_8336
以上两个参数必须设置正确。
③Conditions(条件)
默认设置即可
④Settings(设置)
默认设置即可
5.开启定时任务
重启成功后,在知行之桥的应用系统日志可以看到重启成功的记录,如下图:
EDI服务器为Linux服务器
1.准备好重启IDoc Server名为restartIDocServers.rst的脚本文件,脚本与windows环境的脚本一致。
2.将restartIDocServers.rst脚本文件放在安装目录下的/tmp/webapp/pub文件夹中(pub文件夹需要手动创建)
3.设置定时任务
命令:crontab -e,进入可编辑状态,按照以下规则设置:
分 时 日 月 周 命令行
①如下参考,设置每天3点5分执行curl命令
05 3 * * * curl http://192.168.0.117:8080/pub/restartIDocServers.rst
设置时注意linux时区。
输入命令后,:wq保存退出,显示定时任务创建成功
②查看设置的定时任务
命令:crontab -l
③启动定时任务
命令:/sbin/service crond start
④查看定时任务状态
命令:/sbin/service crond status
4.定时任务工作后,在知行之桥的应用系统日志中显示重启成功的日志信息:
知行之桥中如何进行简单配置来实现
下载知行之桥网站版本(即知行之桥 – 22.0.8348.0之后的网站版本)将支持页面简单配置即可实现重启IDoc Server,配置如下:
在IDoc端口的高级设置页面–特殊设置–其他设置添加参数:ServerAliveCheckInterval=重启时间间隔,如下图:
查看重启IDoc Server的log:在安装目录AppDirectory\logs\IDoc中查看,如下图表示每5分钟重启一次:
更多EDI信息,请参阅: EDI是什么?
注:文案部分图片及内容来源于网络,版权归原创作者所有,如有侵犯到您的权益,请您联系我们进行删除,给您带来困扰,我们深感抱歉。