OpenVMS — пакетная проверка, работает ли последняя версия скрипта

Можно ли закодировать пакетный скрипт, чтобы проверить, не было ли добавлено ни одной версии с тех пор, как эта была поставлена ​​в очередь, и если это так, вместо этого запустите обновленный скрипт.

Я мог бы сделать это, подписавшись на него, но это означало бы 2 сценария для каждого сценария, который у меня есть.

Спасибо за любую помощь.


person Marcus Culver    schedule 30.04.2014    source источник
comment
Когда у меня есть пакетные задания, которые повторно отправляются, я усекаю спецификацию файла (начиная с f$environment( "PROCEDURE" )) в разделителе версий (;) в команде SUBMIT. Первоначально поставленная в очередь процедура будет продолжать выполняться, но в следующий раз будет запущена более новая версия.   -  person HABO    schedule 01.05.2014


Ответы (3)


f$environment и f$search — это лексические функции, которые вы можете использовать. В моем примере отсутствует версия с f$extract, но вы можете использовать f$parse.

$ this = f$environment("PROCEDURE") 
$ write sys$output "This is ", this
$ noversion = f$extract (0,f$locate(";",this),this)
$ write sys$output "without version it is ", noversion
$ latest = f$search (noversion)
$ write sys$output "latest version is ", latest
$ if this .nes. latest -
        then $ write sys$output "There is a new version!"
person user2116290    schedule 30.04.2014
comment
Спасибо за это. Это именно то, что я искал, и оно отлично работает с полным оператором IF-THEN-ELSE. - person Marcus Culver; 01.05.2014

Для вашего типичного пакетного задания с самостоятельной отправкой важно, по крайней мере, удалить версию перед повторной отправкой, чтобы получить текущую версию. Вот пример использования F$ELEMENT (гораздо проще, чем F$PARSE :-).

$  redo = "submit/log/noprint/noti/queue=" + -
      f$getqui("DISPLAY_QUEUE","QUEUE_NAME","*","THIS_JOB")
$  restart = "tomorrow + 07:00:00"               ! First daily run,  Alter as needed.
$  if time.lts."12:00" then restart = "17:00:00" ! Second daily run, Alter as needed.
$  redo /after="''restart'"/para=("''p1'","''p2'","''p3'") 'f$elem(0,";",f$environment("procedure"))

Затем, как отправитель/изменитель командного файла, вы решаете, будет ли уже запланированный следующий запуск использовать новую версию или текущую версию, КОТОРАЯ ЗАПОМНЯЕТСЯ ЧЕРЕЗ ИДЕНТИФИКАТОР ФАЙЛА, а не его имя. Если вы хотите немедленно начать использовать новую версию, просто используйте

$ COPY /OVER my-script.com ;-1 /LOG
%COPY-I-OVERLAY, MY-SCRIPT.COM;35 being overwritten
%COPY-S-COPIED, MY-SCRIPT.COM;36 copied to MY-SCRIPT.COM;35 (5 blocks)

Привет, Хайн

person Hein    schedule 01.05.2014
comment
Спасибо, Хайн. Приведенный выше ответ был именно тем, что я хотел, однако это дает мне еще одно средство для установки нового сценария без дополнительной логики или повторной отправки :) - person Marcus Culver; 01.05.2014

Вы можете отправить процедуру «оболочки», которая ничего не делает, кроме запуска фактической процедуры.

Процедура куртки JACKET.COM

 $ SUBMIT/AFTER= [...] JACKET.COM
 $ @REAL_PROCEDURE "''P1'" "''P2'" "''P3'" [...]

JACKET.COM никогда не обновляется. Текущая версия REAL_PROCEDURE.COM будет запущена при выполнении пакетного задания.

person Mark Diaz    schedule 29.10.2017