CentOS服务器执行puppet apply时无法生成临时文件问题求助
问题:CentOS上执行puppet apply无法生成/tmp临时文件
执行的puppet命令:
puppet apply \ --verbose \ --modulepath=modules \ --node_terminus=exec \ --external_nodes=$PWD/modules/puppet/files/hostinfo/nodeclassifier.rb \ --color=true \ --no-daemonize \ --no-usecacheonfailure \ --server=notahost \ --config=$PWD/modules/puppet/files/puppet.conf \ --debug \ manifests/site.pp
报错信息:
debug: Executing '/opt/puppet-data/puppet/modules/puppet/files/hostinfo/nodeclassifier.rb [host name]' Could not run: cannot generate tempfile `/tmp/puppet20230712-12431-18iovt1-9'
系统相关信息:
- /目录列表(仅展示tmp部分):
ls -la / total 3105 drwxr-xr-x. 26 root root 4096 Jan 12 09:22 . drwxr-xr-x. 26 root root 4096 Jan 12 09:22 .. ... drwxrwxrwt. 32000 root root 3035136 Jul 12 08:23 tmp drwxr-xr-x. 15 root root 4096 Sep 14 2014 usr drwxr-xr-x. 24 root root 4096 Mar 18 2021 var
- 手动验证/tmp可读写:
[root@host puppet]# echo "Test" > /tmp/puppet20230712-4607-ywx98g-9 [root@host puppet]#
- /tmp目录属性:
# lsattr / ... ----------I---- /tmp ...
排查与解决步骤
1. 检查/tmp的inode使用情况
从ls -la输出可见,/tmp的硬链接数高达32000,大概率是inode耗尽(每个文件/目录都需要占用一个inode,大量小文件或子目录会迅速耗尽inode资源)。执行以下命令确认:
df -i /tmp
若输出中IUse%显示为100%,即可确认是inode耗尽导致的问题。
2. 清理/tmp目录
使用系统自带的tmpwatch工具清理长时间未访问的文件/目录:
# 清理72小时内未被访问的文件和目录 tmpwatch 72 /tmp
也可手动清理指定时间范围的文件:
# 删除3天前的普通文件 find /tmp -type f -mtime +3 -delete # 删除所有空目录 find /tmp -type d -empty -delete
注意:清理时避免删除正在被进程占用的文件。
3. 临时指定puppet的临时目录
若暂时无法清理/tmp,可在执行puppet apply时通过--tmpdir参数指定其他有足够inode的目录:
puppet apply \ --tmpdir=/var/tmp \ # 保留原有其他参数 manifests/site.pp
或修改puppet配置文件puppet.conf,添加/修改全局临时目录配置:
[main] tmpdir = /var/tmp
4. 排查SELinux限制(可选)
虽然手动能创建文件,但仍需确认SELinux是否限制了puppet的操作:
getenforce
若状态为Enforcing,可临时关闭测试:
setenforce 0
若关闭后问题解决,需调整SELinux策略,允许puppet在/tmp目录创建临时文件。
内容的提问来源于stack exchange,提问作者Maxim Maximov
相关产品推荐
相关产品推荐

