gpt4 book ai didi

bash - sge 获取脚本中的脚本位置

转载 作者:行者123 更新时间:2023-11-29 09:15:28 26 4
gpt4 key购买 nike

我正在编写要在 sge 集群中通过 qsub 运行的脚本。

我有几个需要在脚本中调用的可执行文件,它们都位于同一位置(与脚本本身相同)。所以我想知道如何获取正在执行的脚本的位置。我有一个自动构建系统,硬编码这个位置是不对的。代码应该是这样的

#!/bin/bash  
#$ -S /bin/bash
#$ -V
#$ -cwd
#$ -N "Job"

exec="/path/to/this/script/"execNameJob
$exec

我尝试了一些东西,但它们没有用,人们被标记为重复。以前的解决方案均无效。我正在运行我的脚本qsub -o console.out/tmp/qsubScript/qsubScript.sh。我要获取的是脚本中的/tmp/qsubScript/路径

SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
SOURCE="$(readlink "$SOURCE")"
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
done
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"

echo " Directory SOURCE: $DIR"
echo " BaseDir 0: " $0
echo " SGE_ROOT: $SGE_ROOT"
echo " SGE_JOB_SPOOL_DIR: $SGE_JOB_SPOOL_DIR"

输出是:

目录来源:/opt/gridengine/default/spool/compute-2-8/job_scripts
BaseDir 0:/opt/gridengine/default/spool/compute-2-8/job_scripts/9534
SGE_ROOT:/opt/gridengine
SGE_JOB_SPOOL_DIR:/opt/gridengine/default/spool/compute-2-8/active_jobs/9534.1

主要问题是 sge 实现将我的脚本复制到 job_script 中,因此我丢失了对原始脚本的引用。

最佳答案

我的猜测是 qsub 将提交存储在一个单独的目录中,然后从那里运行它。到那时,原始队列条目的路径将丢失。如果您需要将其包含在作业的元数据中,您只需将其作为参数传递即可。

通常不保证提交目录对运行作业的节点可见,因此您尝试的操作可能无法直接实现。

根据平台的不同,您可能必须创建某种独立的 bundle ,或者以某种方式在计算节点上引入您需要的依赖项,作为作业启动处理的一部分。

关于bash - sge 获取脚本中的脚本位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37721931/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com