如何控制提交网格作业时使用的Perl版本?
发布时间:2020-12-16 06:27:14 所属栏目:大数据 来源:网络整理
导读:我正在使用SGE(Sun Grid Engine)向网格提交作业.我还使用perlbrew来管理我安装的Perl版本. 我写了一些简短的脚本,用于运行perl脚本,需要特定的Perl版本(5.12.2),如下所示: #!/bin/bash#$-S /bin/bashsource /home/dave/.bash_profile/home/dave/perl5/perlb
我正在使用SGE(Sun Grid Engine)向网格提交作业.我还使用perlbrew来管理我安装的Perl版本.
我写了一些简短的脚本,用于运行perl脚本,需要特定的Perl版本(5.12.2),如下所示: #!/bin/bash #$-S /bin/bash source /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 exists ln: creating symbolic link `/home/dave/perl5/perlbrew/bin/cpan' to `/home/dave/perl5/perlbrew/perls/current/bin/cpan': File exists ln: creating symbolic link `/home/dave/perl5/perlbrew/bin/cpan2dist' to `/home/dave/perl5/perlbrew/perls/current/bin/cpan2dist': File exists ln: cannot remove `/home/dave/perl5/perlbrew/bin/cpanp': No such file or directory ln: cannot remove `/home/dave/perl5/perlbrew/bin/enc2xs': No such file or directory ln: 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/perl use 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 risk perl some_script.pl # and not just perl tar 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 希望一切都有意义吗? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |