千家信息网

linux中出现Argument list too long错误怎么办

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,小编给大家分享一下linux中出现Argument list too long错误怎么办,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1、错误现象这是一台Mysql数据库服务器,在系
千家信息网最后更新 2026年11月04日linux中出现Argument list too long错误怎么办

小编给大家分享一下linux中出现Argument list too long错误怎么办,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

1、错误现象

这是一台Mysql数据库服务器,在系统中运行了很多定时任务,今天通过crontab命令又添加了一个计划任务,退出时发生了如下报错:

#crontab -e

编辑完成后,保存退出,就出现下面如下图所示错误:

2、解决思路
根据上面报错的提示信息,基本判定是磁盘空间满了,那么首先从检查服务器的磁盘空间开始,根据报错提示应首先检查/tmp磁盘空间,然后应该是根分区的磁盘空间,最好是系统其它分区的磁盘空间。

3、问题排查
通过df命令查看了这个服务器上所有磁盘分区的情况,/tmp分区空间还有很多,根分区也还有很大剩余空间,都不存在问题,最后发现是/var磁盘分区空间使用已经100%了,到这里已经定位了问题,是/var磁盘空间爆满导致的,因为crontab会在保存时写文件信息到/var目录下,由于这个磁盘没有空间了,报错也是理所当然了。

4、解决问题
接着通过"du -sh"命令检查/var目录下所有文件或目录的大小,发现/var/spool/clientmqueue目录占用了/var整个分区大小的90%,那么/var/spool/clientmqueue目录下的文件都是怎么产生的呢,是否能删除?下面简单介绍下/var/spool/clientmqueue目录的文件是怎么生成的。

可以打开/var/spool/clientmqueue目录下的一些文件看看,都是一些邮件信息,邮件内容大多是关于Cron Daemon的,其实/var/spool/clientmqueue就是一个邮件暂存的目录,linux服务器在默认情况下会发一些邮件,比如当cron执行的程序有输出内容时,就会发送邮件信息到执行cron进程的用户,系统在发送邮件时,首先会把邮件拷贝到/var/spool/clientmqueue目录下,然后等待MTA程序(mail transfer agent)来处理,而MTA主要的功能是把这个目录中的邮件转移到/var/spool/mqueue目录下,然后再通过sendmail服务发送到真正的目的地。于是检查了这个服务器的sendmail服务,发现没有开启,这样/var/spool/clientmqueue目录非常大的原因就找到了:没有发送邮件的客户端服务,所有邮件就都堆积在这个目录下了。

在确认完这些内容都没用后,切换到/var/spool/clientmqueue目录下,执行rm命令删除所有的文件时,出现了错误:

[root@localhost clientmqueue]# rm */bin/rm: argument list too long

此时出现了本文开头我们谈到的问题。

当Linux下试图传递太多参数给一个系统命令时,就会出现"Argument list too long"错误。这个是Linux系统一直以来都有的限制。查看这个限制可以通过命令"getconf ARG_MAX"来实现,如下图所示:

这是Centos6版本的一个最大值,而在Centos5.x中,这个值相对较小,如下图所示:

所以这个问题更多时候是发生在linux低版本中。

知道了产生问题的原因,解决方法就很多了,这里提供四种解决此问题的方法,分别介绍如下:

(1)手动把命令行参数分成较小的部分
例如:

rm [a-n]* -rfrm [o-z]* -rf

这种方法里最简单的,但是相对较弱智,因为必须要知道怎么平均分割文件,同时对于文件数目极多的情况,需要输入很多遍命令。

(2)使用find命令删除
基本原理是通过find命令筛选文件列表,把符合要求的文件传递给一系列命令。这种方法是最简洁的,也就最有效的。
例如:

find /var/spool/clientmqueue -type f -print -exec rm -f {} \;

但是这种方法也有缺点:就是需要遍历所有文件,因而在文件数量极多时比较耗时。

(3) 通过shell脚本
这种方法是通过编写一个shell脚本,然后通过循序语句实现,与find方法类似。
例如,可以编写如下脚本:

#!/bin/bash# 设定需要删除的文件夹RM_DIR='/var/spool/clientmqueue'cd $RM_DIRfor I in `ls`do rm -f $Idone

(4)重新编译Linux内核
这种方法需要手动增加内核中分配给命令行参数的页数,打开kernel source下面的include/linux/binfmts.h文件,找到如下行:

# define MAX_ARG_PAGES  32

将"32"改为更大的值,例如64或128,然后重新编译内核。
此种方法永久有效,可以彻底解决问题,但是比较复杂,推荐给高级用户使用,没有Linux经验的用户不建议用这种方法。

看完了这篇文章,相信你对"linux中出现Argument list too long错误怎么办"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

文件 目录 命令 方法 空间 邮件 磁盘 问题 服务 错误 服务器 系统 信息 检查 内容 内核 参数 情况 用户 脚本 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网是第几次科技革命的成果 蓝思科技飞鸽互联网 重生之互联网科技帝国 华宇互联网科技 友谊互联网络科技 齐家互联网科技有限公司 互联网科技大会 上海亿帐通互联网科技 互联网科技公司做什么 互联网科技公司的市场部门 开启互联网科技时代小说 玖二柒互联网科技公司待遇 栖莱科技互联网股份有限公司 互联网经济与金融科技 速维有品互联网信息科技(苏州)有限公司 阿里互联网科技企业 易企秀互联网科技是做什么的 银川新华互联网科技学校是国营吗 北京互联网科技类企业分布 长沙易易互联网科技有限公司 互联网科技公司 互联网巨头反垄断金融科技 百单互联网科技有限公司 互联网女皇 腾讯科技 大白互联网科技 互联网科技汛 哈尔滨秒房互联网科技有限公司 西藏七维空间互联网科技有限公司 栖莱科技互联网股份有限公司 易租星互联网科技有限公司
0