/tmp目录不可写,引起module load部分modulefile报错
/tmp目录满了引起module load部分modulefile报错问题描述在机器A上,使用3.2.10版本的Modules,执行module load命令加载部分工具报错提示ERROR:102: Tcl command execution failed: puts stderr [exec hostname],如下所示:[thesre@centos8 ~]$ module avail pyth
/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中均有一条tclsh
的exec
语句(使用该语句用于执行一些简单的系统命令,如用于获取系统版本等),但该类型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>
这个就很容易看懂了,很容易定位到根因。
参考资料
无。
更多推荐
所有评论(0)