2008年8月7日
因为一个客户要把虚拟主机转成另外一种类型 ,结果需要转移服务器,迁移到另外一台机器,log4net死活生成不了日志,并且sqlite的写入一直是失败的。后来查了下,肯定是权限缺失。比如asp.net无法写入,后来让虚拟主机的技术支持把权限设置成完全,才彻底搞定。不过他们公司有一台服务器死活就是不行,这个也够汗的,或许那台服务器死活就是要和我作对。。。
另外不晓得为什么公司服务器最近权限更改后,log4net日志怎么都没法子写入.........
2008年7月22日
这几天新装的系统,把一应齐全都给装了,norton 360safe U盾 开发软件,还有一堆乱七八糟的软件。
貌似没有问题的情况下,做了一个ghost.
没想到这两天,发现输入东西的时候,当前窗口的焦点老是丢失,哇咔咔,以前曾经碰到问题是由于杀毒软件引起的,
于是乎决定试着把罪怪到norton.不料删除的时候,建欣说他好像也遇见过,似乎是一个叫hhukcert的进程引起的,于是咔嚓了那个进程,没问题了。5555,norton已经没法子停止删除。哎,只能再次装了,再次更新病毒库。消耗了一个小时。
这个罪魁祸首的hhukcert就是工行U盾的华虹的驱动带的,想起来一个堂堂的中国工行下的人做出来的程序居然没测试通过就发布,极大的损害了我们对工行的信任。
于是乎,系统重启后,把hhukcert的服务给关了,下次要用U盾的时候再打开即可~~。
工商银行做出来也不保障,失败啊,失败啊。
2008年5月6日
2008年1月9日
如何向远程系统提交命令?
解答 我们知道,在分布式数据处理的环境下,对远程系统上文件内容的操作可以有很多方式,但是如果想简单地在本地对远程系统进行文件管理方面的操作,则可以由一条命令实现:SBMRMTCMD。现在介绍该命令的用法:
1. 首先确保双方系统上的分布式处理服务已启动:
STRTCPSVR SERVER(*DDM)
2. 为目标系统创建DDM文件:
CRTDDMF FILE(Lib/TESTAAA) RMTFILE(Lib/AAA) RMTLOCNAME(s102rncm *IP)
其中:TESTAAA是DDM文件名; AAA是远程系统s102rncm上要操作的文件的名称。
3. 在本地系统上运行文件管理方面的命令,例如:撤消用户USERBBB对文件AAA的所有权限:
SBMRMTCMD CMD('RVKOBJAUT OBJ(LIB/AAA) OBJTYPE(*FILE) USER(USERBBB) AUT(*ALL)') DDMFILE(LIB/TESTAAA)
这样,我们就能很方便地在本地系统上,实现远程系统上文件操作方面的管理。
RUNRMTCMD命令使用
解答 能够向client access发送命令的系统包括AS/400,VM,AIX以及其他版本的UNIX。
发送的命令应当预先在PC的DOS窗口运行,如果有输出,在把输出内容传送到OS/400并产生相应的spool file(QSYSPRT,使用的print file为QSYSPRT);如果命令本身并不产生输出则也会产生一个spool file,内容是无输出。
从OS/400使用RUNRMTCMD命令性client access发送远程命令。PC端可以同时处理多个命令请求,按接收的顺序运行这些命令。
入局远程命令的目的是运行非交互式命令和程序。交互式命令或WINDOWS程序可以运行,并且看起来好象已经从请求系统运行成功,但可能仍在PC运行并等待与用户进行人机对话。
入局远程命令可以使用TCP/IP和SNA,不适用于IPX。
CWBRXD.EXE 用于使用TCP/IP通信时启动入局远程命令精灵程序。
CWBRXDSD.EXE 用于使用TCP/IP通信时停止入局远程命令精灵程序。
AREXECDW.EXE 用于象PCOM那样的WINCPIC兼容栈
AREXECDN.EXE 用于NetSoft栈
语法:
RUNRMTCMD CMD(’pc 命令‘)
----RMTLOCNAME('xxx.xxx.xxx.xxx' *IP)
----RMTUSER(remote user-id)
----RMTPWD(xxxxxx)
----CCSID(pc ccsid)
其中RMTUSER必须时PC上设定的有效用户[注1]。
如果用户和密码有小写,则必须用单引号',否则全部转换成大写处理(NT是大小写敏感的)。
CCSID必须和PC端操作系统的语言相匹配,例如中文Win98、中文NT为1381,而英文Win98、英文NT为437。(用CHCP这个DOS命令看到的PC语言代码不十分可靠)
APPC格式:
RUNRMTCMD CMD(’pc 命令')
----RMTLOCNAME(appn.系统名 *SNA)
----RMTUSER(远程用户 ID)
----RMTPWD(‘口令’)
----CCSID(pc ccsid)
例:
RUNRMTCMD CMD(‘dir c:\/w') RMTLOCNAME('4.17.19.95' *IP) CCSID(437)
要求PC使用英文Win98,并且不需要用户和口令。
RUNRMTCMD CMD('copy c:\config.sys c:\config.bak') RMTLOCNAME('7.19.19.93' *IP)
RMTUSER(MOKCK) RMTPWD('ibmas400') CCSID(437)
spool file结果为’1 file copied'.
ADDJOBSCDE JOB(MYJOBD) CMD(RUNRMTCMD CMD("c:\mydir\daily.bat')
RMTLOCNAME(APPN.PC01 *SNA)) FRQ(*WEEKLY) SCDDAY(*ALL)
SCDTIME(180000)
RUNRMTCMD CMD('c:\progra~1\IBM\RTOPCB c:\MYDATA\MYTFR.TTO')
RMTLOCNAME(YOURNET.PC01 *SNA) RMTUSER(MOKCK)
RUNRMTCMD CMD('c:\windows\calc.exe') RMTLOCNAME(MYPC *IP) CCSID(437)
PC端的计算器会被激活,同时400端出现pending(等待),直到把PC端计算器关闭,400端作业才被释放。
[注1]
CHGPRTF FILE(QSYSPRT) IGCDTA(*YES)
在中文DBCS环境下运行RUNRMTCMD命令时,必须使得spool file的打印摸板QSYSPRT支持DBCS。
[注2]
在NT上运行RUNRMTCMD时必须指定要运行程序的全称路径,默认路径是C:\
用户设定:
在Win98端
默认情况下PC端没有任何关于‘入局远程命令的’设置。单击‘添加’
系统和用户支持*通配符。
系统名应当和DSPNETA中指定的系统名相同,用户则可以任意设置。
第2步:
如果不使用WIN95口令高速缓冲,则必须指定client access入局远程命令。
在NT中把登录client access入局远程命令的管理全部委托给NT的安全管理程序来管理,但要求有效的用户名不能超过10个字符。
启动入局远程命令:
Win98平台运行 c:\windows\cwbrxd.exe
NT把入局远程命令放到[control]==>[service]中,使用start即可激活。
停止入局远程命令:
Win98平台运行 c:\windows\cwbrxdsd.exe
NT把入局远程命令放到[control]==>[service]中,使用stop即可停止。
失败原因检查:
1、执行RUNRMTCMD调用NT端应用,返回‘无效的密码或用户’
检查该用户在NT上是否存在。
RUMRMTCMD中该用户的password是否大小写正确,是否使用了单引号。
在Win98上最好使用system = *,user=*的基本配置
2、RUNRMTCMD返回‘客户端没有启动’
检查RUNRMTCMD在PC端的server精灵程序是否已经启动。
3、SNA,anynet也可以使用RUNRMTCMD
4、如果NT支持GUEST 用户而且没有口令,则RUNRMTCMD时可以设置PWD(*NONE)。
5、在中国5250键盘的仿真中,\被解析成Y(人民币符号),无法通过客户化键盘的方式进行
修正,但在VT100的模式下可以不受影响。
OS/400与UNIX功能相似的部分命令
解答 对于大多数SAP的用户,比较习惯UNIX及WINDOWS命令,而对于OS/400的命令缺少使用经验,这里结合SAP系统经常用到的命令,比较OS/400与UNIX功能相似的命令及其格式。
1.与文件系统有关的命令:
unix命令 对应的AS/400的命令
--------------------------------------------
cd ------CD (后跟路径名用单引号括起来)
ls ------WRKLNK
ls -l ---WRKLNK 命令,再用8,9或12选择项
more ----DSPSTMF
tail ----DSPSTMF 并按F17功能键
vi ------EDTF
cp ------CPY (拷贝的目标文件必须不存在)
mv ------MOV (目标文件必须不存在)
ren -----REN
rm ------DEL 删除文件;RD 删除目录
chgmod --CHUAUT
mount/ln ADDLNK
bdf -----WRKSYSSTS 或WRKDSKSTS查看存储空间
2.与进程有关的命令:
unix命令 对应的AS/400的命令
--------------------------------------------
ps ------WRKACTJOB 用来查看系统上所有的作业,WRKUSRJOB用来查看某个用户的作业;WRKSMBJOB *JOB 查看用户提交的所有作业
kill -9 -ENDJOB OPTION(*IMMED) LOGLMT(0)
执行程序 -CALL PGM(程序) PARM('参数')
程序& ---SMBJOB
exit ----SIGNOFF ENDCNN(*YES)
3.与用户有关的命令:
passwd - CHGPWD用来修改自己的口令;CHGUSRPRF用来修改指定用户的口令
4.其它命令:
ftp ------FTP
telnet ---TELNET
ping -----PING
sqlplus --strsql 或SQLUTIL
编辑---键盘---自定义
定制---点C--功能:编辑复制 --〉到CTRL
点V--功能:编辑粘贴 --〉到CTRL
保存,然后指定键盘的方式
1.ShareODP:
在PF或者LF编译的时候,有个SHARE(Share Open Data Path)的参数,控制该文件是否共享其打开路径。
如果指定SHARE为*NO的话,程序在每次打开一个文件的时候,都会为该文件建立一次访问路径;如果指定SHARE为*YES的话,程序在第一次打开该文件的时候,系统建立该文件的访问路径,在同一个ActiveGroup中再打开该文件时,就不再重新建立该文件的访问路径,而是共享使用之前建立的路径,从而提高了程序运行的速度。
一般在编译的时候该参数设置为*NO,即不是共享打开。在需要共享打开的时候,使用OVRDBF对该参数进行更改。
使用ShareODP需要注意的一些东西:
1).由于在不同的ActiveGroup之间不能ShareODP,所以如果几个程序在编译的时候没有加入到同一个ActivationGroup中,ShareODP就不会有什么效果。
2). 如果PGMA打开FILEA并定位到了第一条记录,然后PGMA调用PGMB;PGMB也打开了FILEA并直接读FILEA,将读到第二条记录; PGMB运行完后PGMA又继续读FILEA下一条记录,此时它读到的将是第三条记录。而如果没有ShareODP的话,PGMA两次读到的会是第一条和第二条记录,PGMB读到的会是第一条记录。
ActiveGroup:
在CRTPGM 的时候,有个参数ACTGRP(ActivationGroup),控制该PGM在运行的时候属于哪个ActiveGroup。如果指定*NEW,则该 PGM会重新建立一个ActiveGroup;如果指定为*CALLER,则该PGM会与调用它的PGM使用同一个ActiveGroup。
2.UserOpen:
RPG程序在使用F表引用外部文件的时候,有一个KeyWords是USROPN。
在没有使用USROPN的时候:系统会在每次运行该程序的时候自动打开所引用的文件;一般可以通过设置*LR为*ON来自动关闭文件,但是如果是SubProcedure,系统不会自动关闭所打开的文件。
如果指定了USROPN:则系统不再控制文件的打开与关闭,由用户手工进行文件的OPEN与CLOSE;如果一个模块已经打开还没有关闭文件的情况下,该模块将不能再对该文件做打开的操作。
USROPN比系统自动打开文件要慢一些。在打开同一个文件5000次的情况下,USROPN使用了400毫秒,系统自动打开只用了4毫秒。
使用UserOpen需要注意的一些东西:
1).在OPEN之前最好使用 %OPEN(FileName) 检查要打开的文件是否已经打开,如果没有打开再执行OPEN的操作。
2). CLOSE *ALL的命令可以关闭本模块打开的所有文件。如果一个文件没有指定为USROPN,Close *ALL也将关闭该文件。并且如果该模块是不参与RPG Cycle的程序,如一个SubProcedure,则在第二次运行本模块的时候,该文件将不会再自动打开,此时如果再对该文件做操作,就会出错。所以最好指定文件名来CLOSE,并注意只关闭USROPN的文件。
用DSPMSGD命令可以查看某个已知某一个的Message ID的内容,但是它不能按照某个关键字查看一个message file中的所有message id,如何按某个关键字搜索整个Message file中的所有message id 呢?
解答 1.在AS/400命令行上输入命令:
DSPMSGD RANGE(*ALL) MSGF(QSYS/QCPFMSG) DETAIL(*BASIC) OUTPUT(*PRINT)
参数说明:
RANGE(*ALL): 列出所有的message id。
MSGF(QSYS/QCPFMSG): 查看QSYS目录下的QCPFMSG message file。
DETAIL(*BASIC): DETAIL参数有两个选项,*FULL -> 列出message的所有信息;
*BASIC -> 仅列出message id,message的严重级别和message描述。
OUTPUT(*PRINT): 将命令的执行结果生成一个Spool file。
2.命令执行完成之后,生成Spool file:QPMSGD。
3.在AS/400命令行上执行命令:
-----------WRKSPLF
4.在QPMSGD文件前输入 5(display),打开这个文件。
5.在“Find”处输入要搜索的关键字,如:艘索“password”关键字,按功能键F16,即可搜索所有Message file的内容。如下图所示:
File . . . . . : -QPMSGD -----------Page/Line --21/33
Control . . . . . ------------------Columns ----1 - 75
Find . . . . . . -password
*...+...1...+...2...+...3...+...4...+...5...+...6...+...7...+
CPC1E75 -0 -Some system options not changed. Some changed and require I
CPC1E76 -0 -Some passwords not changed. Try again later.
CPC1E77 -0 -Passwords successfully changed.
CPC1E78 -0 -System options successfully changed; IPL required.
CPC1E79 -0 -System options successfully changed.
CPC1115 50 -CPC1115 Class &1 in library &2 not found.
CPC1116 50 -CPC1116 Program &1 in library &2 not found.
CPC1117 50 -CPC1117 Routing data does not match routing entry.
CPC1118 50 -CPC1118 Maximum number active jobs for routing entry reache
CPC1119 50 -CPC1119 No authority to class &1 in &2.
CPC1120 50 -CPC1120 No authority to program &1 in &2.
CPC1121 50 -CPC1121 No storage requested for storage pool.
CPC1122 50 -CPC1122 Function check occurred while trying to start job.
CPC1123 60 -Subsystem &1 cannot start prestart job &2.
CPC1124 50 -ENDJOBABN issued against job &3/&2/&1 by user &4.
CPC1125 50 -Job &3/&2/&1 was ended by user &4.
--------------------------------------------------------------------More.
1. 显示自己作业的QTEMP的内容:
(1) 用DSPLIB显示所有外部对象(操作系统之上的可操作的对象):
DSPLIB LIB(QTEMP);
(2) 用DMPLIB显示所有内部对象:
DMPOBJ OBJ(QTEMP) OBJTYPE(*LIB)
结果位于假脱机文件QPSRVDMP中:(如图所示)
2. 显示别人作业的QTEMP的内容:
(1). 用WRKACTJOB找出所要查看的作业的名称,例如:123315/USERxxx/QPADEV0003
(2). STRSRVJOB JOB(123315/USERxxx/QPADEV0003)
DMPOBJ OBJ(QTEMP) OBJTYPE(*LIB)
ENDSRVJOB
结果位于假脱机文件QPSRVDMP中.