- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用脚本开始 SLURM 作业,脚本必须根据它的位置工作,该位置是在脚本本身内部使用 SCRIPT_LOCATION=$(realpath $0)
获得的。 .但是 SLURM 将脚本复制到 slurmd
文件夹并从那里开始工作,它搞砸了进一步的行动。
是否有任何选项可以在移动/复制之前获取用于 slurm 作业的脚本的位置?
脚本位于网络共享文件夹 /storage/software_folder/software_name/scripts/this_script.sh
它必须:
software_name
文件夹 software_name
文件夹到本地文件夹 /node_folder
在节点 /node_folder/software_name/scripts/launch.sh
#!/bin/bash
#SBATCH --nodes=1
#SBATCH --partition=my_partition_name
# getting location of software_name
SHARED_PATH=$(dirname $(dirname $(realpath $0)))
# separating the software_name from path
SOFTWARE_NAME=$(basename $SHARED_PATH)
# target location to copy project
LOCAL_SOFTWARE_FOLDER='/node_folder'
# corrected path for target
LOCAL_PATH=$LOCAL_SOFTWARE_FOLDER/$SOFTWARE_NAME
# Copying software folder from network storage to local
cp -r $SHARED_PATH $LOCAL_SOFTWARE_FOLDER
# running the script
sh $LOCAL_PATH/scripts/launch.sh
sh /storage/software/scripts/this_script.sh
.
sbatch /storage/software/scripts/this_script.sh
它被分配给节点之一,但是:
/var/spool/slurmd/job_number/slurm_script
从 $(dirname $(dirname $(realpath $0)))
起,一切都搞砸了返回 /var/spool/slurmd
/storage/software_folder/software_name/
)?
sbatch -D /storage/software_folder/software_name ./scripts/this_script.sh
运行并使用
SHARED_PATH="${SLURM_SUBMIT_DIR}"
在脚本本身内部。
sbatch: error: Unable to open file ./scripts/this_script.sh
.
sbatch -D /storage/software_folder/software_name /storage/software_folder/software_name/scripts/this_script.sh
.它试图运行,但是:
echo "${SLURM_SUBMIT_DIR}"
脚本内部打印 /home/username_who_started_script
而不是 /storage/software_folder/software_name
#SBATCH --chdir=/storage/software_folder/software_name
在脚本内部,但在这种情况下
echo "${SLURM_SUBMIT_DIR}"
返回
/home/username_who_started_script
或
/
(如果以 root 身份运行)
${SLURM_SUBMIT_DIR}
联系仅当任务运行为:
cd /storage/software_folder/software_name
sbatch ./scripts/this_script.sh
#!/bin/bash
#SBATCH --nodes=1
#SBATCH --partition=my_partition_name
# check if script is started via SLURM or bash
# if with SLURM: there variable '$SLURM_JOB_ID' will exist
# `if [ -n $SLURM_JOB_ID ]` checks if $SLURM_JOB_ID is not an empty string
if [ -n $SLURM_JOB_ID ]; then
# check the original location through scontrol and $SLURM_JOB_ID
SCRIPT_PATH=$(scontrol show job $SLURM_JOBID | awk -F= '/Command=/{print $2}')
else
# otherwise: started with bash. Get the real location.
SCRIPT_PATH=$(realpath $0)
fi
# getting location of software_name
SHARED_PATH=$(dirname $(dirname $(SCRIPT_PATH)))
# separating the software_name from path
SOFTWARE_NAME=$(basename $SHARED_PATH)
# target location to copy project
LOCAL_SOFTWARE_FOLDER='/node_folder'
# corrected path for target
LOCAL_PATH=$LOCAL_SOFTWARE_FOLDER/$SOFTWARE_NAME
# Copying software folder from network storage to local
cp -r $SHARED_PATH $LOCAL_SOFTWARE_FOLDER
# running the script
sh $LOCAL_PATH/scripts/launch.sh
最佳答案
您可以从 scontrol
获取提交脚本的初始(即提交时)位置。像这样:
scontrol show job $SLURM_JOBID | awk -F= '/Command=/{print $2}'
realpath $0
与上述部分。当然,这只适用于 Slurm 分配。因此,如果您希望脚本在任何情况下都能正常工作,您将需要一些逻辑,例如:
if [ -n $SLURM_JOB_ID ] ; then
THEPATH=$(scontrol show job $SLURM_JOBID | awk -F= '/Command=/{print $2}')
else
THEPATH=$(realpath $0)
fi
SHARED_PATH=$(dirname $(dirname "${THEPATH}"))
关于bash - 如何获取用于 SLURM 作业的脚本的原始位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56962129/
我在 slurm 中使用 sbatch 运行了很多作业,如下所示: #!/usr/bin/env python #SBATCH --job-name=Python #SBATCH --array=1-
我想让安排作业的用户使用 -t, --time= 列出任何作业时间限制.但是,当用户没有设置时间限制时,我想强加一个默认时间限制,例如 1 小时。我在 slurm.conf 中找不到任何设置来执行此操
例如,您需要运行30个srun作业,但要确保每个作业都在特定节点列表中的一个节点上运行(具有相同的性能,以公平地比较时序)。 你会怎么做? 我试过的 srun --nodelist=machineN[
据我们所知,SLURM 可以在作业完成时发送电子邮件。 除此之外,类似于作业完成时的邮件机制: [问] SLURM 是否可以在任何作业完成时触发脚本(由前端 SLURM 用户实现)? 示例解决方案:这
有没有办法找出作业被 slurm 取消的原因?我想将达到资源限制的情况与所有其他原因(如手动取消)区分开来。如果达到资源限制,我也想知道是哪一个。 最佳答案 slurm 日志文件明确包含该信息。它还会
我观察到当我运行 SLURM 作业时,它可以在其他文件夹路径上创建文件,也可以删除它们。他们可以通过 SLURM 作业访问其他文件夹/文件并对其进行更改,这似乎很危险。 $ sbatch run.sh
我想为 slurm 中的批处理作业指定每个内核的最大内存量 我可以看到两个 sbatch 内存选项: --mem=MB maximum amount of real memory per n
我知道对于特定的工作 ID,我可以使用 scontrol hold $JOBID。 如何保留多个 ID 的作业或/和保留一系列作业 ID 的作业(例如 scontrol hold 294724-294
我对 cpu 如何与内存通信知之甚少,所以我不确定这是否是一个“正确”的问题。 在我提交给 slurm 集群的作业脚本中,该脚本需要从存储在工作字典中的数据库中读取数据。我想监视运行此脚本所使用的内存
我正在整理一个 snakemake slurm 工作流程,并且我的工作目录被 slurm 输出文件弄得杂乱无章。我希望我的工作流程至少将这些文件定向到我的工作目录中的“slurm”目录。我目前的工作流
我正在努力理解如何使用 SLURM 在同一节点中运行多个进程。 假设我想运行一个具有 100 个不同输入参数的程序。例如,这就是我在笔记本电脑上所做的: for i in `seq 100`; do
sinfo仅显示当前状态( alloc 、 idle 等)和 Slurm 节点的时间限制。 squeue似乎只显示用户自己提交的作业,而不显示其他用户提交的作业。 有没有办法知道其他用户分配的节点何时
我有一个需要处理的文本文件列表(约 200 个文件)。所以我试图为此任务提交一个 slurm 作业数组,但我找不到解决方案。我尝试过的是通过循环遍历文件来提交多个作业(约 200 个作业)来完成一个任
我知道如何使用 cgroups(分配内存、cpu 使用...)和 slurm(提交、暂停/停止工作)。我想知道 cgroups 如何与 slurm 一起工作。当我向 slurm 提交作业时,我可以在哪
我有一堆作业在 slurm 中作为数组作业运行: 123_[1-500] PD my_job 0:00 me 123_2 R my_job 9:99 me 123_3 R
作为管理员,我需要为给定的工作赋予最大的优先级。 我发现提交选项如:--priority=或 --nice[=adjustment]可能有用,但我不知道我应该为它们分配哪些值,以便为工作提供最高优先级
我想提交一个数组作业来处理 100 个任务,每个任务只使用一个 CPU。我可以访问具有 10 个节点和 24 个内核的集群,每个节点都激活了超线程。我用 --array=1-100%24 限制并发作业
我有一些脚本发送到我可以使用 sbatch 访问的集群。但是,我想暂停这些正在运行的脚本,而不必取消它们的工作,因为它们已经运行了一段时间。 有没有办法在不取消他们已经完成的工作的情况下暂停/暂停当前
我有一份运行由 slurm 管理的 Linux 机器的工作。现在作业已经运行了几个小时,我意识到我低估了它完成所需的时间,因此我指定的 --time 参数的值不够。有没有办法通过 slurm 为现有正
是否可以扩展 SLURM 中命令 sacct 的 JobName 列中使用的字符数? 例如,我目前有: JobID JobName Elapsed NCPUS
我是一名优秀的程序员,十分优秀!