Cron任务日志出现“No space left on device”错误但实际存储空间充足的排查求助
Cron任务日志出现“No space left on device”错误但实际存储空间充足的排查求助
我来帮你捋捋这个问题,先看你提供的日志细节:
--2022-12-09 19:32:08-- https://www.example.com/dosomething.php
Resolving www.example.com (www.example.com)... x.x.x.x
Connecting to www.example.com (www.example.com)|x.x.x.x|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 0 [text/html]
dosomething.php.962181: No space left on device
Cannot write to 'dosomething.php.962181' (Success).
这里有个关键细节你可能没注意到:wget默认会把下载的文件保存到当前工作目录,而不是你指定日志的/var/log目录!你用df和df -i检查的大概率是/var所在分区,但cron任务默认的工作目录是执行该任务的用户的home目录(比如/home/cesar),问题很可能出在这个home目录所在的分区——要么空间满了,要么inode耗尽了。
给你几个排查和解决的具体思路:
- 先检查cron工作目录的状态:执行
df ~和df -i ~,看看这个用户home目录所在分区的存储空间和inode是不是真的耗尽了。 - 调整wget命令,避免生成临时文件:因为你只是要触发这个PHP脚本执行,根本不需要保存下载的文件内容,直接改成下面的命令就行:
这里* * * * * wget -O - https://www.example.com/dosomething.php >> /var/log/myjob.log 2>&1-O -表示把下载的内容输出到标准输出,再重定向到日志文件,wget就不会在工作目录生成dosomething.php.xxxxxx这类临时文件,自然就不会触发空间错误了。 - 手动验证问题:切换到cron的工作目录(比如执行
cd ~),然后尝试创建一个测试文件touch test.txt,如果提示“No space left on device”,那实锤就是这个目录的空间/配额问题。 - 检查用户磁盘配额:有些服务器会给单个用户设置磁盘配额,哪怕分区整体有空间,用户配额用完也会报错,你可以用
quota -u $(whoami)查看自己的配额使用情况。
备注:内容来源于stack exchange,提问作者Cesar Bielich
相关产品推荐
相关产品推荐

