使用 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 命令的一些细节 运行:
cd /target/directory
应该是不言自明的
rm $SYMLINK
删除符号链接,以便可以再次创建指向新目录。
下一行 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*
操作数匹配的所有目录条目,而不仅仅是目录。但是对于当前的问题,假设除了(部署)目录项之外没有其他匹配项。
每次我在 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 命令的一些细节 运行:
cd /target/directory
应该是不言自明的rm $SYMLINK
删除符号链接,以便可以再次创建指向新目录。下一行
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*
操作数匹配的所有目录条目,而不仅仅是目录。但是对于当前的问题,假设除了(部署)目录项之外没有其他匹配项。