You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

srun交互式会话Lua脚本设置bash --login不生效问题求助

问题:Slurm Lua脚本无法将bash替换为bash --login生效

我尝试在cli_filter/lua中编写Lua脚本,目的是让bash的所有交互式会话都被当作登录会话(会读取/etc/profile及/etc/profile.d/*.sh),但把"bash"替换为"bash --login"的设置始终不生效。

我的Lua脚本

function slurm_cli_pre_submit(options, pack_offset)
    if options["type"] == "srun" then
        if options["pty"] ~= nil then
            if options.argv[1] == "bash" then
                options.argv[1] = 'bash --login'          
                print(options.argv[1])                    
                print("slurm_cli_pre_submit: Forcing interactive non-login session as a login shell with -l")
            end
        end
    end
    return slurm.SUCCESS
end

function slurm_cli_setup_defaults(options, early_pass)
    return slurm.SUCCESS
end

function slurm_cli_post_submit(offset, job_id, step_id)
    return slurm.SUCCESS
end

执行输出

-bash-4.2$ srun -w node5 --pty bash
bash                                      
slurm_cli_pre_submit: Forcing interactive non-login session as a login shell with -l
bash-4.4$

问题原因及解决办法

问题出在options.argv[1] = 'bash --login'这行代码:argv是按命令参数拆分的数组,直接把第一个元素改成带空格的字符串后,Slurm会把整个"bash --login"当作一个单独的命令去查找执行,而不是将--login识别为bash的参数,所以实际启动的还是普通bash会话。

正确的做法是拆分参数,将--login作为单独的元素插入到argv数组中:

function slurm_cli_pre_submit(options, pack_offset)
    if options["type"] == "srun" then
        if options["pty"] ~= nil then
            if options.argv[1] == "bash" then
                -- 拆分参数,确保--login被识别为bash的选项
                options.argv[1] = "bash"
                table.insert(options.argv, 2, "--login")
                print(table.concat(options.argv, " "))
                print("slurm_cli_pre_submit: 强制将交互式非登录会话转为登录shell")
            end
        end
    end
    return slurm.SUCCESS
end

function slurm_cli_setup_defaults(options, early_pass)
    return slurm.SUCCESS
end

function slurm_cli_post_submit(offset, job_id, step_id)
    return slurm.SUCCESS
end

修改后,argv数组会变为["bash", "--login", ...],Slurm会正确传递参数给bash,启动登录shell,此时bash会自动读取/etc/profile及/etc/profile.d/*.sh中的配置。

内容的提问来源于stack exchange,提问作者Roshni K.P.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 22:52:53