「十分钟涨知识」Linux故障排查和处理技巧汇总
从犯错中不断反思总结才是成长的重要根源。作为Linux运维人员,遇见各种问题或者故障总是家常便饭,能够从当中总结出经验,汇总并分析故障产生的原因,是我们需要一直保持的好习惯。
以下列出的是运维人员在工作当中出现频率较高的故障以及问题的解决方法,希望可以帮助到大家避“坑”!
1.crontab输出结果控制
问题:
/var/spool/clientmqueue目录占用空间超过100G
原因:
cron中执行的程序有输出内容,输出内容会以邮件形式发给cron的用户,而sendmail没有启动所以就产生了/var/spool/clientmqueue目录下的那些文件,日积月累可能撑破磁盘。
解决方法:
1)直接手动删除:
ls|xargsrm-f;
2)彻底解决:在cron的自动执行语句后加上>/dev/null2>&1
2.shell脚本不执行
问题:
自己写的shell脚本,无法执行,报错:
badinterpreter:Nosuchfileordirectory
原因:
在windows下编写的脚本,上传到linux服务器执行。在DOS/windows里,文本文件的换行符为rn,而在 *nix系统里则为n,所以DOS/Windows里编辑过的文本文件到了 *nix里,每一行都多了个^M。
解决方法:
1)重新在linux下编写脚本;
2)vi:%s/r//g:%s/^M//g(^M输入用Ctrl+v,Ctrl+m)
3.telnet很慢/ssh很慢
问题:
某天研发某同事说10.50访问10.52memcached服务异常,让我们检查下看网络/服务/系统是否有异常。检查发现系统正常,服务正常,10.50ping10.52也正常,但10.50telnet10.52很慢。同时发现该机器的namesever是不起作用的。
原因:
becauseyourPCdoesn’tdoareverseDNSlookuponyourIPthen…whenyoutelnet/ftpintoyourlinuxbox,it’lldoadnslookuponyou。
解决方法:
1)修改/etc/hosts使hostname和ip对应;
2)在/etc/resolv.conf注释掉nameserver或者找一个“活的”nameserver。
4.忘记root密码
问题:
忘记root密码
解决方法:
启动进入单用户模式
使用passwd修改root密码
在单用户模式中,Linux不需要root密码(Red Hat系统不需要root密码,但SuSe则需要,不同Linux系统稍有差别,本文以Fedora Core 6为例讲解),这使更改root密码非常容易。了解当系统引导进入多用户模式失败时,如何进入单用户模式,非常重要。
1、 在系统启动过程中,会出现开始界面,按任意键,进入GRUB菜单选项。(若希望以后无此提示,直接进入GRUB菜单选项,删除配置文件grub.conf中“hiddenmenu”项即可。)
2、 按“e”键编辑GRUB引导菜单选项,按“e”键后的GRUB屏幕。通过箭头键下移到kernel行,并按“e”键,
3、在尾行光标处添加single,按回车键返回前一个屏幕,按“b”键进行引导,则系统自动进入单用户模式,如果要改变root密码,则执行命令:sh-3.1# passwd root
更改成功后,执行命令exit退出重启即可。
5.文件删了磁盘空间没释放
问题:
发现某台机器df-h已用磁盘空间为100G,而du-sh/*显示所有使用空间加起来才40G。
原因:
可能有人直接用rm删除某个正在编写的文件,导致文件删了但磁盘空间没释放
解决方法:
1)最简单重启系统或者重启相关服务。
2)干掉进程
/usr/sbin/lsof|grepdeleted
ora25575data33uREG65,654294983680/oradata/DATAPRE/UNDOTBS009.dbf(deleted)
从lsof的输出中,我们可以发现pid为25575的进程持有着以文件描述号(fd)为33打开的文件/oradata/DATAPRE/UNDOTBS009.dbf。在我们找到了这个文件之后可以通过结束进程的方式来释放被占用的空间:echo>/proc/25575/fd/33
3)删除正在写的文件一般用cat/dev/null>file
6.Read-onlyfilesystem
问题:
使用mysql建表建失败,提示如下:
mysql>createtablewosontest(colddname1char(1)); ERROR1005(HY000):Can’tcreatetable‘wosontest’(errno:30)
经检查mysql用户权限以及相关目录权限没问题;用perror30提示信息为:
OSerrorcode30:Read-onlyfilesystem
原因:
1)文件系统损坏;
2)磁盘又坏道;
3)fstab文件配置错误,如分区格式错误错误(将ntfs写成了fat)、配置指令拼写错误等。
解决方法:
1)由于是测试机,重启机器后恢复;
2)用mount可解决。
7.find 错误使用
问题:
在tmp目录下有大量包含picture_*的临时文件,每天凌晨3:00对一天前的文件进行清理。之前在crontab下跑下面的脚本,但是脚本效率很低,每次执行时负载猛涨,以致影响到其他服务。
#!/bin/sh find/tmp-name“picture_*”-mtime+1-execrm-f{};
原因:
目录下有大量文件,用find 太消耗资源。
解决方法:
修改查找的方式,修改如下
#!/bin/sh cd/tmp time=`date-d“2dayago”“+%b%d”` ls-l|grep“picture”|grep“$time”|awk‘{print$NF}’|xargsrm-rf
8.http服务无法启动
问题:
网站前端环境http无法启动,报如下错:
/etc/init.d/httpdstart Startinghttpd:[SatJan2917:49:002011][warn]moduleantibot_moduleisalreadyloaded,skipping Useproxyforwardasremoteip:true. Antibotexcludepattern:.*.[(js|css|jpg|gif|png)] Antibotseedcheckpattern:login (98)Addressalreadyinuse:make_sock:couldnotbindtoaddress[::]:7080 (98)Addressalreadyinuse:make_sock:couldnotbindtoaddress0.0.0.0:7080 nolisteningsocketsavailable,shuttingdown Unabletoopenlog[FAILED]
原因:
1)端口被占用:表面看是7080端口被占用,netstat-npl|grep7080发现7080并没有占用;
2)在配置文件中重复写了端口,两个文件同时写了Listen7080
/etc/httpd/conf/http.conf /etc/httpd/conf.d/t.10086.cn.conf
解决方法:
注释掉/etc/httpd/conf.d/t.10086.cn.conf的Listen7080,重启即可。
9.toomanyopenfile
问题:
toomanyopenfile
解决方法:
echo“”>>/etc/security/limits.conf echo“*softnproc65535″>>/etc/security/limits.conf echo“*hardnproc65535″>>/etc/security/limits.conf echo“*softnofile65535″>>/etc/security/limits.conf echo“*hardnofile65535″>>/etc/security/limits.conf echo“”>>/root/.bash_profile echo“ulimit-n65535″>>/root/.bash_profile echo“ulimit-u65535″>>/root/.bash_profile
最后重启机器或者执行
ulimit-u655345&&ulimit-n65535
10.Linux permission denied
问题:
permission denied
解决方法:
方法1: 如果不是root登陆,可以切换到root用户执行一下试试;
方法2:如果方法1任然不行,可以试着给文件添加所有用户的可执行权限:
# chmod a+x xxx.sh
或开放文件的所有权限:
# chmod 777 xxx.sh