我有一个运行bash脚本的python代码main.py
,bash脚本inturn提交一个作业(job)job.bash
,并使用echo $JOBID | awk {'print $4'}
获得其JOBID
.如果我在终端中运行python,bash脚本可以工作,我可以获得并响应JOBID
,如下所示:
#!/bin/bash
JOBID=`sbatch ~/job.bash | tee output.log`
JOBID=`echo $JOBID | awk {'print $4'}`
echo $JOBID
上面作为python的一部分在终端python main.py
中运行,但在终端nohup python main.py &
中运行,echo不会打印或存储JOBID
.
有什么原因吗?
我提交了slurm作业(job),因此JOBID
是slurm的pid
(7月17日更新)看起来问题在于命令sbatch ~/job.bash | tee output.log
,它没有使用nohup
提交,因此JOBID
永远不会被存储和 echo .
(7月18日更新)根据@pynexj在脚本结果中添加set -x
的 comments :
nohup: ignoring input and redirecting stderr to stdout
+ date
Mon Jul 18 21:46:35 +03 2022
++ sbatch ~/job.bash
++ tee output.log
+ JOBID=
++ echo
++ awk '{print $4}'
+ JOBID=
+ echo
这个问题仍然存在.似乎nohup
与sbatch
不兼容.
问题:为什么nohup应该阻止提交slurm作业(job)?它的目标仅仅是捕捉终止信号?