如何从Ansible(临时命令或剧本)执行含本地Python脚本的mpiexec命令
解决Ansible执行本地MPI Python脚本的问题
问题分析
你之前用script模块指定executable='mpiexec -host ... python3'的方式存在逻辑错误——script模块的executable参数仅用于指定执行脚本的解释器(比如bash、python),不能用来传递MPI启动命令。这种错误用法会导致SSH会话被MPI进程异常占用,最终超时断开。
正确实现步骤
1. 复制本地MPI脚本到远程共享目录
先用copy模块把本地的hello_mpi.py传到远程master节点的NFS共享目录/home/pi/cloud,确保所有MPI节点都能访问该脚本:
ansible master -m copy -a "src=./hello_mpi.py dest=/home/pi/cloud/hello_mpi.py mode=0755"
2. 用Shell模块执行MPI启动命令
脚本复制完成后,直接在远程master节点通过shell模块启动MPI任务:
ansible master -m shell -a "cd /home/pi/cloud && mpiexec -host master,node1,node2,node3 python3 hello_mpi.py"
3. 优化:避免SSH会话超时(可选)
如果MPI任务执行时间较长,容易触发SSH超时断开,可以在Ansible配置文件(ansible.cfg)中添加以下配置延长超时时间:
[ssh_connection] ssh_args = -o ServerAliveInterval=30 -o ServerAliveCountMax=10 timeout = 600
原方法失效的原因
script模块的工作逻辑是:将本地脚本上传到远程临时目录,再用指定的解释器执行脚本。你把executable设为mpiexec -host ... python3,相当于让远程系统用整串MPI命令作为"解释器"去执行脚本,完全违背了模块的设计逻辑,最终导致SSH进程被异常占用并断开连接。
内容的提问来源于stack exchange,提问作者Coddy
相关产品推荐
相关产品推荐

