如何在Sun Grid Engine中指定作业工作目录?
解决作业工作目录与文件路径匹配的问题
针对你遇到的情况,这里提供几种可行的解决方案,帮你让作业正确找到mydata.txt文件:
方案1:修改脚本,让脚本自行定位文件路径
不需要依赖作业的工作目录设置,直接在脚本里用相对脚本位置的路径定位目标文件:
#!/bin/bash # 获取脚本所在的目录路径 SCRIPT_DIR=$(dirname "$0") # 用脚本目录拼接sub目录下的mydata.txt路径 tail "${SCRIPT_DIR}/sub/mydata.txt" -n 1 > output.txt
或者让脚本先切换到sub目录再执行命令:
#!/bin/bash SCRIPT_DIR=$(dirname "$0") # 切换到sub目录,切换失败则退出脚本 cd "${SCRIPT_DIR}/sub" || exit 1 tail mydata.txt -n 1 > output.txt
这两种方式都能保证不管作业的工作目录是什么,脚本都能找到正确的文件。
方案2:提交作业时直接指定工作目录
如果你的作业调度器支持直接指定工作目录(比如Slurm用--chdir参数,其他调度器可能有类似参数),可以在提交命令里直接把工作目录设为main/sub,不用依赖-cwd:
假设你在main目录下提交作业,命令可以写成:
# 示例:替换成你的实际调度命令 sbatch --chdir=./sub myscript.sh
这样作业运行时的工作目录就是main/sub,脚本里的tail mydata.txt就能找到文件。
为什么修改$HOME没用?
你尝试的export $HOME=main/sub无效,是因为作业运行在独立的环境中,提交时临时设置的$HOME不会传递到作业的运行环境里。作业默认使用的是服务器上你的用户账号的$HOME目录,不是提交时修改的临时值。
内容的提问来源于stack exchange,提问作者ivan199415
相关产品推荐
相关产品推荐

