如何控制提交网格作业时使用的Perl版本?

如何控制提交网格作业时使用的Perl版本?,第1张

概述我正在使用SGE(Sun Grid Engine)向网格提交作业.我还使用perlbrew来管理我安装的Perl版本. 我写了一些简短的脚本,用于运行perl脚本,需要特定的Perl版本(5.12.2),如下所示: #!/bin/bash#$-S /bin/bashsource /home/dave/.bash_profile/home/dave/perl5/perlbrew/bin/pe 我正在使用SGE(Sun GrID Engine)向网格提交作业.我还使用perlbrew来管理我安装的Perl版本.
我写了一些简短的脚本,用于运行perl脚本,需要特定的Perl版本(5.12.2),如下所示:

#!/bin/bash#$-S /bin/bashsource /home/dave/.bash_profile/home/dave/perl5/perlbrew/bin/perlbrew switch perl-5.12.2/home/dave/scripts/proc_12.pl --in=/home/dave/in/in.store --dir=/home/dave/in/dir2 --params=/home/dave/in/params.p

现在,当我提交单个作业时,一切正常,但是当我提交很多时,我开始收到与perlbrew相关的错误消息,例如:

ln: creating symbolic link `current' to `perl-5.12.2': file existsln: creating symbolic link `/home/dave/perl5/perlbrew/bin/cpan' to `/home/dave/perl5/perlbrew/perls/current/bin/cpan': file existsln: creating symbolic link `/home/dave/perl5/perlbrew/bin/cpan2dist' to `/home/dave/perl5/perlbrew/perls/current/bin/cpan2dist': file existsln: cannot remove `/home/dave/perl5/perlbrew/bin/cpanp': No such file or directoryln: cannot remove `/home/dave/perl5/perlbrew/bin/enc2xs': No such file or directoryln: cannot remove `/home/dave/perl5/perlbrew/bin/find2perl': No such file or directory

所以我猜/ home / dave / perl5 / perlbrew / bin / perlbrew开关perl-5.12.2行引起了问题.

我能做什么?

如何使用perl-5.12.2(默认值为5.8.8)运行脚本?

解决方法 我不建议将perlbrew开关perl-5.12.2放在你运行的任何脚本中.它实际上只用于命令行使用.

如果你需要一个脚本来使用特定版本的Perl,那么要在shebang上给它一个完整的perlbrew路径:

#!/home/dave/perl5/perlbrew/perls/perl-5.12.2/bin/perluse 5.012;use warnings;...

然后确保其可执行文件并运行如下:

chmod +x your_perl_program.pl./your_perl_program.pl

或者在脚本中使用perl二进制文件的完整路径名:

#!/bin/bash/home/dave/perl5/perlbrew/perls/perl-5.12.2/bin/perl your_perl_program.pl

顺便说一句,如果您在脚本或perl程序中运行任何不合格的内容,您将面临潜在的生产和安全问题.例如:

#!/bin/sh# security riskperl some_script.pl# and not just perltar cvf archive.tar *.txt# production risk/home/dave/perl5/perlbrew/bin/perl some_other_script.pl

前两个是糟糕的,因为它会拿起第一个perl&它在你的道路上找到了tar.所以这取决于$PATH设置,这可能会成为安全风险.最后一个也不好,因为它依赖perl perlbrew当前切换到它运行的时间点:(

这样做可能是一个潜在的生产和安全噩梦.相反,上面应该这样写:

#!/bin/sh# fully qualifIEd Now.  Uses OS provIDed perl/usr/bin/perl some_script.pl# ditto/usr/bin/tar cvf archive.tar *.txt# this needs to run in perl 5.12.2/home/dave/perl5/perlbrew/perls/perl-5.12.2/bin/perl some_other_script.pl

希望一切都有意义吗?

总结

以上是内存溢出为你收集整理的如何控制提交网格作业时使用的Perl版本?全部内容,希望文章能够帮你解决如何控制提交网格作业时使用的Perl版本?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1257861.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存