bash - SLURM_ARRAY_TASK_ID 为空
问题描述
我是 SLURM 和云计算的新手。
我编写了一个 bash 脚本,它使用带有数组机制的作业并行化。问题是我尝试使用 SLURM 中可用的 SLURM_ARRAY_TASK_ID 环境变量来获取任务的 id,但该变量为空,因此算术运算中存在错误。
这是 bash 代码。
#!/bin/bash
#SBATCH --job-name=Distributed Raytracing
#SBATCH --time=01:00
#SBATCH --array=0-5
cd ./povray
SF=$((${SLURM_ARRAY_TASK_ID}*10+1))
EF=$((${SLURM_ARRAY_TASK_ID}*10+10))
./povray +A +W100 +H100 +Lshare/povray-3.6/include/ +SF$SF +EF$EF glsbng.ini
这里是输出错误。
/var/spool/slurm/job01706/slurm_script: line 10: *10+1: syntax error: operand expected (error token is "*10+1")
/var/spool/slurm/job01706/slurm_script: line 11: *10+10: syntax error: operand expected (error token is "*10+10")
怎么了 ?
提前感谢您的回答。
解决方案
经过多次研究和测试,我发现问题来自 SLURM。当我使用 sbatch 提交脚本时,只启动了一项具有一项任务的作业,而不是像预期的那样具有六项任务的一项作业。因此 SLURM_ARRAY_TASK_ID 没有初始化,因为作业中只有一个任务。问题的根源来自第一个#SBATCH 选项,因为给作业的名称包含一个空格。由于这个空间,我认为 SLURM 不会解释其他选项,因此脚本是使用默认选项启动的。
我刚换
#SBATCH --job-name=Distributed Raytracing
和
#SBATCH --job-name=DistributedRaytracing
现在没有错误了。
我现在问我为什么 SLURM 在出现此类错误(名称中的空格)时不显示错误,以及为什么不解释其他选项?
推荐阅读
- reactjs - 如何在amcharts4中设置每列的轴引导范围
- javascript - 如何在 vite2 中内联 css
- c++ - 向量初始化中使用的make_pair是错误的吗?
- lit - 为什么有一个“。” 在点亮样本的选项中?
- kdb - kdb: longList@dictionary behavior
- bash - 这个命令在 VSCode 的 CLI 启动脚本中做了什么?
- pynput - Pynput 鼠标点击
- mysql - Spring Boot,Java,Docker Compose,尝试在两个容器(mysql,my-api)之间建立连接时出现“连接被拒绝”
- javascript - 从 AJAX 脚本中的不同页面获取 IDText
- amazon-web-services - Elastic Beanstalk Amazon linux 2 与 docker | nginx自定义配置