parallel与nohup联用报错:cannot open /dev/tty问题求助
解决方案
一、解决Parallel的/dev/tty错误与SIGHUP问题
1. 禁用Parallel的TTY分配
Parallel默认会尝试为每个任务分配TTY,后台运行时无TTY会触发cannot open /dev/tty错误。在run.sh的parallel命令中添加--tty none参数:
parallel --no-notice \ --verbose \ --progress \ -j 4 \ --tty none \ --ungroup './scripts/chain_base.sh {1} {2} {3}' \ ::: 150 200 ::: 100 200 500 1000 ::: default v1 < /dev/null
2. 避免SIGHUP信号终止进程
nohup可能无法完全隔离终端信号,改用setsid启动脚本,让进程脱离当前会话:
setsid bash scripts/run.sh > run.out 2>&1 &
或者结合nohup增强稳定性:
nohup setsid bash scripts/run.sh > run.out 2>&1 &
二、解决Tmux的Conda环境继承问题
1. 让Tmux自动加载环境配置
执行conda init bash(若使用zsh则替换为conda init zsh),然后将conda环境激活命令添加到~/.bashrc(或~/.zshrc):
conda activate your_target_env
重启tmux后会自动加载目标环境。
2. 启动Tmux时直接指定环境
用以下命令启动tmux会话,确保加载环境后再执行脚本:
tmux new-session -d -s training_session "bash -c 'source ~/.bashrc; bash scripts/run.sh > run.out 2>&1'"
3. 在脚本内直接指定Python路径
避免环境依赖问题,在chain_base.sh中使用conda环境的Python绝对路径:
# 替换为你的conda环境Python路径 /path/to/your/env/bin/python src/abc.py \ --num_iter ${NUM_ITER} \ --do_kmeans --k $k \ --kmeans_split $s \ --init_method ${INIT_METHOD} \ --num_tokens ${TOKEN_NUM}
内容的提问来源于stack exchange,提问作者rany lin
相关产品推荐
相关产品推荐

