如何在Kubeflow Pipelines的kfp.dsl.ContainerOp中运行多个脚本
结论
你当前写的command配置方式无法实现需求,你传递的python /home/jovyan/test.py会被识别为deploy.sh的入参,而非独立执行的命令。该需求可以实现,以下是两种常用的正确配置方案:
方案1:直接通过bash -c拼接多命令
直接在command参数中用bash -c把两个命令按执行顺序拼接,适合命令逻辑简单的场景:
def test_container_op(): input_path = '/home/jovyan/' return dsl.ContainerOp( name='test container', image="<image name>", command=[ '/bin/bash', '-c', # 用&&连接代表前一个命令执行成功才会执行后一个,换成;则不管前一个命令是否成功都执行后一个 'chmod +x /home/jovyan/deploy.sh && /home/jovyan/deploy.sh && python /home/jovyan/test.py' ], file_outputs={ 'modeule-logs' : input_path + 'output.log' } )
注意:如果构建镜像时已经给
deploy.sh加了可执行权限,可以去掉开头的chmod +x命令。
方案2:封装统一启动脚本
如果后续还要加更多执行逻辑,建议在自定义镜像里封装一个单独的启动脚本,比如start.sh,内容如下:
#!/bin/bash chmod +x /home/jovyan/deploy.sh # 先执行部署脚本 /home/jovyan/deploy.sh # 再执行Python脚本 python /home/jovyan/test.py
之后将启动脚本的执行逻辑配置到command即可:
command=[ '/bin/bash', '/home/jovyan/start.sh' ]
这种方式的可读性和可维护性更高,适合复杂的命令流场景。
内容的提问来源于stack exchange,提问作者red_devil
相关产品推荐
相关产品推荐

