/tmp目录不可写,引起module load部分modulefile报错

问题描述

在机器A上,使用3.2.10版本的Modules,执行module load命令加载部分工具,报错提示ERROR:102: Tcl command execution failed: puts stderr [exec hostname]
其中modulefile内容,如下所示:

[thesre@centos8 ~]$ cat /home/thesre/privatemodules/opensource/python/3.7.7_test
#%Module1.0

# Author: thesre
# Date  : 20210719

# PATH variable setting.
prepend-path PATH /software/opensource/python/3.7.7_test/bin

# a test exec statement.
puts stderr [exec hostname]

module相关操作及报错:

[thesre@centos8 ~]$ module avail python

---------------------------------- /home/thesre/privatemodules/opensource ----------------------------------
python/3.7.7      python/3.7.7_test python/3.8.3
[thesre@centos8 ~]$ module show python/3.7.7_test
-------------------------------------------------------------------
/home/thesre/privatemodules/opensource/python/3.7.7_test:

prepend-path     PATH /software/opensource/python/3.7.7_test/bin 
python/3.7.7_test(40):ERROR:102: Tcl command execution failed: puts stderr [exec hostname]

-------------------------------------------------------------------

[thesre@centos8 ~]$ module load python/3.7.7_test
module-info mode: load
python/3.7.7_test(40):ERROR:102: Tcl command execution failed: puts stderr [exec hostname]

[thesre@centos8 ~]$ grep 'exec hostname' /home/thesre/privatemodules/opensource/python/3.7.7_test
puts stderr [exec hostname]

但在其余机器是正常work的。

问题分析

确定故障域

经过排查,在机器A上报错的modulefile中均有一条tclshexec语句(使用该语句用于执行一些简单的系统命令,如用于获取系统版本等),但该类型modulefile在其它机器没报错。

进一步定位

启动一个shell(进程ID为17138),并在另一个terminal中使用strace追踪它。
然后在该shell(进程ID为17138)执行module load命令,来看看它究竟做了什么。
在这里插入图片描述
进入到/tmp/thesre_2021-07-19_23:09:38查看日志,发现这行比较可疑
在这里插入图片描述

问题解决

如上,显示/tmp目录权限不足。经修正权限后,问题解决;如果是/tmp目录满了,则提示ENOSPC(no space left on device),则需要清理磁盘。

问题总结

[thesre@centos8 ~]$ ls -ld /tmp
dr-xr-xr-t. 18 root root 4096 Jul 20 08:25 /tmp
[thesre@centos8 ~]$ tclsh
% exec hostname
couldn't create error file for command: permission denied

tclsh解析器在执行exec时,会在/tmp目录下创建一个error文件。如果/tmp目录满了或者无权限,则会失败。

经测试

  • 在Modules 3.2.10上报错仅提示了语句执行失败,当有source嵌套的tclsh脚本时看不到真正报错的行。不方便定位;
  • 在Modules 4.7.1上报错信息如下所示,
module load python/3.7.7_test

Loading python/3.7.7_test
  Module ERROR: couldn't create error file for command: permission denied
        while executing
    "exec hostname"
        (file "/home/thesre/privatemodules/opensource/python/3.7.7_test" line
    40)
    Please contact <root@localhost>

这个就很容易看懂了,很容易定位到根因。

参考资料

无。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐