分类: 系统运维
2008-09-02 19:54:51
转一篇来自的文章,写的很好,收藏之~
PSL编译
1. 如何将PSL脚本编译成lib文件?
我想大家最关心的就是这个问题了,所以将它列为第一个。
首先,在lib的源文件(如mylib.psl)中需要使用export关键字export变量或者函数,格式如下:
export function functionname;
export variable;
然后通过命令:psl –l mylib.psl编译成对应的mylib.lib文件。
2. 如何在KM中调用lib?
当编译成.lib文件后,放至$PATROL_HOME/lib/psl目录下。
然后在PSL代码中使用requires关键字引用.lib文件,形如:
requires mylib;
现在让我们看个例子吧:
file : mylib.psl
# Export section
export function myfunc;
# Function declaration section
function myfunc(site)
{
print(” I Love ".site);
}
然后编译:
C:\> psl –l mylib.psl(或者在Patrol Dev Console的命令行执行也可以,不过需要将源文件放在相应的目录下,根据其提示)
file : test.psl
requires mylib;
myfunc(“ITSMCN”);
最后通过命令psl test.psl执行一下,即可看到:
I Love ITSMCN
关于export、requires关键字的用法这里就不赘述了,自己去看BMC的文档吧;-) 。
3. lib库的移植性
所有的lib库文件都是可移植的,只要在一个平台上编译过的就可以直接移植到另一个平台,而不需要重新编译。当然,你首先得保证你的代码能够在所有平台上运行。比如,要想在OS上执行一个系统命令以查看目录列表,那得分情况考虑,可以这样做:
if (get("/appType") == "NT")
{
dircmd="dir";
}
else
{
dircmd="ls";
}
execute("OS",dircmd);
4. PATROL如何识别lib的版本
PSL库文件的版主从它的序列号来判断,如:
# PSL Serial No.: 962954673
这与保存在文件中的PSL脚本相同,在文件的第一行就是# PSL Serial No.
5. 如何检查lib库已经安装在Agent上了?
当PSL编译器发现requires语句的时候,agent将加载lib文件。但是这容易导致一些问题,因为Dev Console在提交KM的时候只会发送PSL脚本,而不会发送lib文件。因此,在PSL中requires某些lib的时候检查该lib文件是否已经在agent上是一个好的习惯。
看一下这段错误的代码:
phome=get(“/patrolHome”);
libfile=phome.”/lib/mylib.lib”;
if (file(libfile))
{
requires mylib;
}
else
{
print(“Library not available, exiting …”);
exit;
}
上面提到,当PSL编译器发现requires语句的时候,agent将加载lib文件。但是,如果这个lib文件没有安装在agent系统上,你将不会得到错误提示,因为PSL脚本根本还没被编译。
下面这段代码可以正确地完成任务:
warn="";
alarm="";
PslExecute("LIBTEST","requires \"mylib1.lib\";\n".
"requires \"mylib2.lib\";",warn,alarm);
if (warn || alarm)
{
print("KM not properly installed, libraries missing !");
exit;
}