如何使用Slurm将脚本上传至非本地集群运行?
非交互式上传脚本到远程集群的解决方案
嘿,我刚接触多集群系统的时候也碰到过一模一样的困扰——不想每次都进交互式shell手动敲代码,想直接在本地搞定文件传输对吧?别慌,给你几个靠谱的非交互式方法:
方法1:修正scp命令(最常用)
你说用scp传不了,大概率是命令格式或者权限问题。先确认scp的正确用法:
scp [本地文件路径] [集群用户名]@[集群地址]:[远程目标路径]
举个实际例子,假设你的用户名是johndoe,集群地址是cluster01.yourlab.com,想把脚本传到远程的~/jobs/目录:
- 先远程创建目标目录(非交互式):
ssh johndoe@cluster01.yourlab.com "mkdir -p ~/jobs/" - 一次性上传两个脚本:
scp myjob.sh stuff.R johndoe@cluster01.yourlab.com:~/jobs/
如果还是失败,检查下:
- 集群地址、用户名是否正确
- 远程目标路径你有没有写入权限
- 本地网络能不能直接连通集群(会不会需要VPN或者堡垒机?)
方法2:用管道+ssh直接写入远程文件
如果scp因为某些限制用不了,还可以把本地文件的内容通过管道传到远程,直接创建文件:
- 上传
myjob.sh:cat myjob.sh | ssh johndoe@cluster01.yourlab.com "cat > ~/jobs/myjob.sh" - 上传
stuff.R:cat stuff.R | ssh johndoe@cluster01.yourlab.com "cat > ~/jobs/stuff.R"
上传完记得给bash脚本加执行权限(非交互式):
ssh johndoe@cluster01.yourlab.com "chmod +x ~/jobs/myjob.sh"
方法3:用rsync(更稳定的传输工具)
如果集群安装了rsync,用它比scp更可靠,还支持增量传输(下次传修改后的文件只会传变化的部分):
rsync -av myjob.sh stuff.R johndoe@cluster01.yourlab.com:~/jobs/
-a参数会保留文件权限、时间戳等属性,-v会显示传输详情,方便排查问题。
如果尝试后还是有问题,可以把scp/ssh的报错信息贴出来,更容易定位具体原因哦~
内容的提问来源于stack exchange,提问作者Anarchisto_de_Paris
相关产品推荐
相关产品推荐

