使用 z OS 脚本将符号链接的目标替换为新的子文件夹

Replacing target of symlink with newest subfolder using zOS script

每次我在 zOS 服务器上部署代理时,都会在 /usr/local/avi/ 下创建一个新的子文件夹。

我在每次部署后手动将现有符号链接更改为该子文件夹,最新的。

我想编写一个作业来检查 /usr/local/avi 下哪个是最新的子文件夹并相应地更新符号链接。

我对zOS几乎一无所知

谢谢

“...想写作业...”,您是在谈论 z/OS 批处理作业吗?如果是这样,您可以 运行 将 BPXBATCH 编程为 运行 shell 命令或 shell 脚本,您将在 shell 会话中手动 运行。

//jobname JOB CLASS=....  <== You need to adapt this JOB statement to fit your installations needs.
//STEP01   EXEC PGM=BPXBATCH
//STDOUT   DD   SYSOUT=*
//STDERR   DD   SYSOUT=*
//STDENV   DD   *
SYMLINK=sym-link-to-current-dir
DIRPREFIX=deployment-directory-prefix
/*
//STDPARM  DD   *
SH
  cd /target/directory ;                                         
  rm $SYMLINK ;                                             
  ln -s  $(ls -trd $DIRPREFIX* | tail -n 1)  $SYMLINK ;  
/*

以上命令假设部署目录的名称有一个共同的前缀。相应地调整 //STDENV 下的变量 DIRPREFIX。 为了方便起见,符号链接名称也设置为变量(SYMLINK)。

注意 shell 管道符号 | 是一个变体字符。这意味着要在 TSO/ISPF 会话中键入的实际字符取决于您使用的代码页。例如,我是 运行 CP500(多国),我必须为 shell 输入感叹号 ! 才能看到 |

运行 批处理作业意味着您可以 submit 该作业,并且您可以读取作业输出,例如通过 SDSF 在您的 TSO/ISPF 会话中。

据我所知,无法自动检测目录创建并启动某些脚本。

关于 UNIX 命令的一些细节 运行:

  1. cd /target/directory应该是不言自明的

  2. rm $SYMLINK 删除符号链接,以便可以再次创建指向新目录。

  3. 下一行 ln -s $(ls -trd $DIRPREFIX* | tail -n 1) $SYMLINK 创建一个指向最新目录的新符号链接。在这一行中,部分 $(.....) 运行 是一个子 shell 和 returns 结果输出(stdout)返回给父 shell,它替换了 $(.....)与结果,然后继续执行命令行。

ls -trd $DIRPREFIX* 列出所有匹配目录的名称 (*1) 并按时间 (-t) 倒序 (-r) 对输出进行排序,以便最新的目录将列在最后一行。然后将此输出通过管道传输到 tail -n 1 命令,该命令仅列出最后一行 (-n 1)。这行随后将替换 $(.....) 以完成 ln 实用程序。

(*1) 实际上 ls 列出了与 $DIRPREFIX* 操作数匹配的所有目录条目,而不仅仅是目录。但是对于当前的问题,假设除了(部署)目录项之外没有其他匹配项。