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

Ansible调用Python脚本执行runuser在SLES15.4中挂起问题排查

SAP HANA检查脚本在Ansible(root调用)SUSE 15.4中runuser挂起的排查思路

可能的原因及排查方案

  • runuser的stdin/stdout重定向问题
    SUSE 15.x对runuser的默认行为做了调整,在非交互式环境(比如Ansible远程执行)中,若未明确重定向标准输入/输出/错误流,进程会因等待stdin输入而挂起——直接在OS执行时是交互式环境,stdin关联终端,因此无此问题。
    检查脚本中runuser的调用方式,例如将原命令runuser -u sidadm /path/to/hana_check.sh改为:

    runuser -u sidadm -- /path/to/hana_check.sh < /dev/null > /tmp/hana_check.log 2>&1
    

    强制断开stdin并重定向日志输出。

  • SUSE 15.x的PAM配置差异
    SUSE 12到15升级后,PAM(可插拔认证模块)的默认配置有所变化,尤其是runuser的session模块规则。查看/etc/pam.d/runuser文件:

    • SUSE 12中可能允许无终端的session,而SUSE 15默认要求关联终端(比如包含session required pam_loginuid.so或session required pam_console.so规则)。
      可临时注释相关PAM规则测试,若恢复正常,可修改PAM配置,添加针对sidadm用户的例外,或调整runuser调用时的PAM环境变量。
  • Ansible执行环境变量差异
    Ansible远程执行的环境变量与直接登录OS的环境变量不同,SUSE 15.x对环境变量的依赖更严格。比如sidadm用户的.profile或.bashrc中若存在需要终端交互的命令(如read、tput),在非交互式环境下会卡住。
    可在runuser调用时指定非交互式shell模式:

    runuser -u sidadm -s /bin/bash -c "set +o interactive; /path/to/hana_check.sh"
    

    或修改sidadm的shell配置文件,跳过仅在交互式环境下执行的命令。

  • AppArmor权限限制
    SUSE 15.x默认启用AppArmor,可能限制了runuser在Ansible执行环境中的操作权限。检查AppArmor日志(/var/log/audit/audit.log或/var/log/messages),查看是否有针对runuser或sidadm的权限拒绝记录。若存在,调整AppArmor规则,允许相关进程的操作。

  • runuser命令参数解析变化
    SUSE 15使用的util-linux版本更高,runuser的参数解析逻辑有调整。若原命令未用--分隔符,可能导致后续参数被错误解析。确保runuser调用格式正确:

    runuser -u <user> -- <command> <args>
    

    避免参数混淆引发的异常。

内容的提问来源于stack exchange,提问作者etorrab

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:17:33