Определите, запущен ли скрипт в SGE - PullRequest
1 голос
/ 14 марта 2011

Как я могу определить из сценария Perl, работает ли он через SGE или локально из командной строки?

Ответы [ 3 ]

4 голосов
/ 14 марта 2011

С http://www.cbi.utsa.edu/sge_tutorial:

When a Sun Grid Engine job is run, a number of variables are preset into the
job’s script environment, as listed below.

SGE_ROOT - The Sun Grid Engine root directory as set for sge_execd before
   start-up or the default /usr/SGE
SGE_CELL - The Sun Grid Engine cell in which the job executes
SGE_JOB_SPOOL_DIR - The directory used by sge_shepherd(8) to store jobrelated
   data during job execution
...
...

Проверка% ENV должна сообщить вам, запускается ли она через SGE.

0 голосов
/ 30 августа 2012

Сценарий, предоставленный jlp, является тщательным способом проверки и будет моим рекомендуемым способом сделать это.Хотя, если вы хотите сделать быстрое заявление, чтобы проверить, есть ли в среде идентификатор задания SGE.Смотри ниже скрипт.

#!/usr/bin/perl

use strict;

my $job_id = $ENV{JOB_ID};

if ($job_id > 0) {
  print "Is and SGE job";
} else {
  print "Is NOT and SGE job";
}
0 голосов
/ 31 августа 2011

Вы можете попробовать что-то вроде этого:

use Proc::ProcessTable;

my $running_under_sge = 0;
my $ppid = getppid();
my $t = new Proc::ProcessTable;
foreach my $p (@{$t->table}) {
    if ($p->pid == $ppid) {
        if ($p->cmdline =~ m/sge_shepherd/) {
            $running_under_sge++;
            last;
        }
    }
}

Это работает, проверяя родительский процесс вашей программы.Если родительским процессом является sge_shepherd, то он был запущен демоном SGE exec.В зависимости от того, какую версию Grid Engine вы используете, имя может отличаться.

...