Solaris系统cron服务异常解决记录
2017-08-25 20:51
513 查看
自从公司政策变化,将服务器转到部门后,像我这种小白总会遇到各种各样维护的问题,这不,最近两月发现NIS服务工作异常,不能实时同步远端LDAP数据了。由于NIS和DNS服务器系统是古老的SunOS 5.10,谁用谁知道,我是真的不喜欢啊~开始比较懒,请IT帮忙,但各种推诿,一个月过去问题还在,心里万千只草泥马奔腾,好吧,无奈之下只能自己硬着头皮上了。
本文记叙了解决问题的整个过程,比较啰嗦,如果您只想看问题是如何解决的,请直接跳转到本文末尾的第4节查看总结。
以下是我解决这个问题的大致过程。
啰嗦一句,Solaris下crontab文件放在
有两种方法查看crontab文件的内容:
- 第一种,用编辑器直接打开
- 第二种,使用命令
以下是以root身份查看crontab的内容:
说实话,我开始是真不知道是为什么不能同步~求爷爷告奶奶的找人帮忙检查NIS同步设置,在同事的提示之下,以下用于从远端同步LDAP数据下载passwd的内容被注释了:
以下内容用于从同步的passwd内容更新NIS服务数据:
检查完,果然是同步任务被注释了,不知道是哪个搞的鬼~真缺德!果断的编辑crontab文件将数据同步数据打开。
编辑cron内容也有个小波折。
在命令行输入
像这样:
鸟哥的书上明明是说这样可以编辑crontab文件的,到底是什么情况!!!
度娘加Solaris系统管理指南里面都提到,想要在Solaris上编辑crontab,需要先设置EDITOR:
原来默认需要EDITOR变量来指定crontab的编辑器,默认EDITOR没有设置,设置完EDITOR,终于可以通过
修改完,仍然不能同步啊,瞬间想死的心都有了。
希望来了,手动成功说明同步更新的功能是正常的,那问题就出在cron服务了。
那就找最近的日志看看:
压根不知道发生了什么事,度娘了一下”
ptree命令中出现了一大堆执行任务
进一步检查脚本“
看来根源是cron执行脚本中“
修改crontab脚本时,觉得修改完肯定要重启cron服务才行,网上找了半天,一句也没提到如何在Solaris下重启cron服务,无奈之下,直接将cron进程kill了,再次检查cron进程,发现系统自动生成了一个,这个好,不用想法如何重启了。
1. 在确认同步设置正确的情况下,手动尝试同步数据成功,说明问题出在cron服务上;
2. 检查cron服务日志文件
根据日志信息进行百度,发现cron队列满了
用ptree命令查找cron服务相关进程,发现
手动检查
取消失败任务,杀死cron队列中的挂起进程,cron服务正常运作。
- 《Solaris系统管理指南:基本管理》
- 《Solaris系统管理指南:高级管理》
- 《Solaris系统管理指南:安全性服务》
- 《Solaris系统管理指南:网络服务》
- 《Solaris系统管理指南:IP服务》
- 《Solaris系统管理指南:命名和目录服务(DNS、NIS和LDAP)》
- 《Solaris系统管理指南:Naming and Directory Services (NIS+) 》
本文记叙了解决问题的整个过程,比较啰嗦,如果您只想看问题是如何解决的,请直接跳转到本文末尾的第4节查看总结。
以下是我解决这个问题的大致过程。
1. 检查同步设置
NIS服务器上的数据每15分钟更新一次,所以肯定使用了cron服务。啰嗦一句,Solaris下crontab文件放在
/var/spool/cron/crontabs目录下:
# cd /var/spool/cron/crontabs # ls -lh total 14 -rw------- 1 root sys 190 Nov 10 2006 adm -r-------- 1 root root 452 Jan 22 2005 lp -rw------- 1 root root 2.0K Aug 24 15:17 root -rw------- 1 root sys 308 Nov 10 2006 sys -r-------- 1 root sys 404 Feb 14 2007 uucp
有两种方法查看crontab文件的内容:
- 第一种,用编辑器直接打开
/var/spool/cron/crontabs目录下相应的文件查看
- 第二种,使用命令
crontab -l [username]查看,这里的username指定了要为其显示crontab文件的用户账户名称,不带username会显示当前用户缺省的crontab文件内容(如当前是root用户,则显示root文件的内容)。
以下是以root身份查看crontab的内容:
# crontab -l # HEADER: This file was autogenerated at Thu Jul 24 08:23:09 +0800 2014 by puppet. # HEADER: While it can still be managed manually, it is definitely not recommended. # HEADER: Note particularly that the comments starting with 'Puppet Name' should # HEADER: not be deleted, as doing so could cause duplicate cron jobs. #ident "@(#)root 1.21 04/03/23 SMI" # # The root crontab should be used to perform accounting data collection. # # 10 3 * * * /usr/sbin/logadm 15 3 * * 0 /usr/lib/fs/nfs/nfsfind 30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean # ... # L2N # 2,17,32,47 * * * * /var/yp/etc/L2N/L2N_group > /tmp/L2N_group.log 2>&1 # # NAC Error messages 59 23 * * * /tools/logs/filers/bin/chk.nac.messages.pl -s shenzhen 2>&1 | /bin/mailx -s 'Shenzhen NAC error messages of the day' it-she-filers-list@guyongqiangx.com # # l2n_ng 'make passwd' 5x per-hour 6,18,30,42,54 * * * * (cd /var/yp/etc; /usr/ccs/bin/make passwd > /tmp/l2n_ng.log 2>&1) #
说实话,我开始是真不知道是为什么不能同步~求爷爷告奶奶的找人帮忙检查NIS同步设置,在同事的提示之下,以下用于从远端同步LDAP数据下载passwd的内容被注释了:
# L2N # 2,17,32,47 * * * * /var/yp/etc/L2N/L2N_group > /tmp/L2N_group.log 2>&1
以下内容用于从同步的passwd内容更新NIS服务数据:
# l2n_ng 'make passwd' 5x per-hour 6,18,30,42,54 * * * * (cd /var/yp/etc; /usr/ccs/bin/make passwd > /tmp/l2n_ng.log 2>&1)
检查完,果然是同步任务被注释了,不知道是哪个搞的鬼~真缺德!果断的编辑crontab文件将数据同步数据打开。
编辑cron内容也有个小波折。
在命令行输入
crontab -e,除了下面冒出来一串不知道是什么东西的数字,毛反应都没有啊~
像这样:
# crontab -e 2090
鸟哥的书上明明是说这样可以编辑crontab文件的,到底是什么情况!!!
度娘加Solaris系统管理指南里面都提到,想要在Solaris上编辑crontab,需要先设置EDITOR:
# which $EDITOR # # EDITOR=vi # export EDITOR # # which $EDITOR /usr/bin/vi
原来默认需要EDITOR变量来指定crontab的编辑器,默认EDITOR没有设置,设置完EDITOR,终于可以通过
crontab -e来修改了。
修改完,仍然不能同步啊,瞬间想死的心都有了。
2. 转机,手动更新成功
绝望之下,自己尝试在命令行输入crontab中NIS数据同步的命令进行手动更新,天呐噜,竟然成功了~希望来了,手动成功说明同步更新的功能是正常的,那问题就出在cron服务了。
3. 检查并修复cron服务
3.1 检查日志
默认cron服务的日志位于:/var/cron/log,进去一看,惊呆了,日志竟然有200M+:
# ls -lh /var/cron/ total 526230 ... -rw------- 1 root root 218M Aug 25 17:30 log ...
那就找最近的日志看看:
# tail /var/cron/log ! c queue max run limit reached Thu Aug 24 14:56:00 2017 ! rescheduling a cron job Thu Aug 24 14:56:00 2017 ! c queue max run limit reached Thu Aug 24 14:56:00 2017 ! rescheduling a cron job Thu Aug 24 14:56:00 2017 ! c queue max run limit reached Thu Aug 24 14:56:00 2017 ! rescheduling a cron job Thu Aug 24 14:56:00 2017 ! c queue max run limit reached Thu Aug 24 14:56:00 2017 ! rescheduling a cron job Thu Aug 24 14:56:00 2017 ! c queue max run limit reached Thu Aug 24 14:56:00 2017 ! rescheduling a cron job Thu Aug 24 14:56:00 2017 #
压根不知道发生了什么事,度娘了一下”
c queue max run limit reached“,我靠,说cron队列满了~~~
3.2 查找cron失败原因
根据cron的PID使用ptree检查相关进程:# ps -ef | grep cron root 317 1 0 Oct 01 ? 3:25 /usr/sbin/cron root 4586 4572 0 14:56:45 pts/4 0:00 grep cron # # ptree 317 317 /usr/sbin/cron 949 sh -c /tools/logs/filers/bin/chk.nac.messages.pl -s shenzhen 2>&1 | /bin/mailx 950 /bin/mailx -s Shenzhen NAC error messages of the day it-she-filers-list@guyongqiangx 951 /usr/local/bin/perl -T /tools/logs/filers/bin/chk.nac.messages.pl -s shenzhen 1878 sh -c /tools/logs/filers/bin/chk.nac.messages.pl -s shenzhen 2>&1 | /bin/mailx 1879 /bin/mailx -s Shenzhen NAC error messages of the day it-she-filers-list@guyongqiangx 1880 /usr/local/bin/perl -T /tools/logs/filers/bin/chk.nac.messages.pl -s shenzhen 2871 sh -c /tools/logs/filers/bin/chk.nac.messages.pl -s shenzhen 2>&1 | /bin/mailx 2872 /bin/mailx -s Shenzhen NAC error messages of the day it-she-filers-list@guyongqiangx 2873 /usr/local/bin/perl -T /tools/logs/filers/bin/chk.nac.messages.pl -s shenzhen ... # # top load averages: 0.05, 0.07, 0.04; up 327+13:54:24 15:33:13 310 processes: 309 sleeping, 1 on cpu CPU states: % idle, % user, % kernel, % iowait, % swap Memory: 4091M phys mem, 2901M free mem, 38G swap, 38G free swap PID USERNAME LWP PRI NICE SIZE RES STATE TIME CPU COMMAND 9663 root 7 59 0 9176K 6848K sleep 369:18 0.00% named 11148 root 2 59 0 5984K 3508K sleep 31:20 0.00% automountd 271 root 1 59 0 5464K 1996K sleep 25:11 0.00% ypserv 398 root 15 59 0 4996K 3156K sleep 19:02 0.00% syslogd 420 root 1 59 0 0K 0K sleep 12:47 0.00% snmpd 421 root 1 59 0 6928K 3104K sleep 7:45 0.00% httpd 9 root 15 59 0 10M 9340K sleep 5:32 0.00% svc.configd 317 root 1 59 0 2548K 1336K sleep 3:24 0.00% cron 7 root 13 59 0 10M 9184K sleep 2:27 0.00% svc.startd 21473 root 30 59 0 5068K 4228K sleep 2:21 0.00% nscd 417 root 15 59 0 13M 9064K sleep 2:19 0.00% fmd 589 root 1 59 0 2132K 1480K sleep 1:41 0.00% master 237 daemon 1 59 0 2676K 1356K sleep 1:24 0.00% rpcbind 1 root 1 59 0 2156K 1052K sleep 0:33 0.00% init CPU states: 99.9% idle, 0.0% user, 0.1% kernel, 0.0% iowait, 0.0% swap Memory: 4091M phys mem, 2901M free mem, 38G swap, 38G free swap #
ptree命令中出现了一大堆执行任务
sh -c /tools/logs/filers/bin/chk.nac.messages.pl -s shenzhen 2>&1 ...的进程,top命令显示当前竟然有310个进程。
进一步检查脚本“
chk.nac.messages.pl”执行的命令,确实是失败挂起了。
看来根源是cron执行脚本中“
chk.nac.messages.pl”相应的任务挂起没有返回,然后每次调用cron就生成一个进程,直到最后cron的队列满了无法再创建工作队列执行任务。
3.3 修复任务
修改crontab脚本,暂时不再执行“chk.nac.messages.pl”,这还没完,因为cron队列满了,所以kill所有
chk.nac.messages.pl相关任务,重启cron服务,一切又恢复如初了。
修改crontab脚本时,觉得修改完肯定要重启cron服务才行,网上找了半天,一句也没提到如何在Solaris下重启cron服务,无奈之下,直接将cron进程kill了,再次检查cron进程,发现系统自动生成了一个,这个好,不用想法如何重启了。
4. 总结
说了一大篇废话,以下是解决步骤的总结:1. 在确认同步设置正确的情况下,手动尝试同步数据成功,说明问题出在cron服务上;
2. 检查cron服务日志文件
/var/cron/log,定位到文件末尾,发现大量日志信息:
! c queue max run limit reached Thu Aug 24 14:56:00 2017 ! rescheduling a cron job Thu Aug 24 14:56:00 2017
根据日志信息进行百度,发现cron队列满了
用ptree命令查找cron服务相关进程,发现
chk.nac.messages.pl脚本相关的任务特别多
手动检查
chk.nac.messages.pl任务的执行,发现进程挂起来了。因此根源是cron在其队列中不断定时创建这个任务,但任务不会结束,导致cron队列里的任务越来越多,最后队列满了无法再启动新的任务
取消失败任务,杀死cron队列中的挂起进程,cron服务正常运作。
5. 官方Solaris管理手册系列
最后,对于Solaris新手,果断献上官方的Solaris管理手册系列:- 《Solaris系统管理指南:基本管理》
- 《Solaris系统管理指南:高级管理》
- 《Solaris系统管理指南:安全性服务》
- 《Solaris系统管理指南:网络服务》
- 《Solaris系统管理指南:IP服务》
- 《Solaris系统管理指南:命名和目录服务(DNS、NIS和LDAP)》
- 《Solaris系统管理指南:Naming and Directory Services (NIS+) 》
相关文章推荐
- 关于Java导入excel表格出现下标越界异常的解决方法(个人心得记录)
- Android Service被关闭后自动重启,解决被异常kill 服务
- 右键新建菜单异常解决 | windows服务启动失败解决
- Android Service被关闭后自动重启,解决被异常kill 服务
- (Android开发)ADB被占用,服务(Service)不能开启等情况记录与解决办法
- 记录一次cefsharp1输入法在win7下异常解决定位
- Oracle 过程中的select into 中查询记录数不是1导致异常的解决办法
- 在cron启动定时任务后总是会启动一个[sendmail] 进程的解决方法, 并且每次cron任务之后msmtp.log总是记录一条发送失败的日志
- history历史记录在AJAX下出现异常跳转 [解决]
- 线程池创立多线程引发的一些异常记录,待解决
- 对ruby服务设置自动重启,出错并解决(记录)
- 使用Dubbo服务出现java.io.IOException: invalid constant type: 18异常解决办法
- dubbo服务,常见异常记录
- Android中NoClassDefFoundError异常解决记录
- 记录 Linux 服务器磁盘空间还有但是服务创建写入文件的问题 解决
- Eclipse之NDK编译——常见异常的解决办法记录
- 更改计算机名称导致Oracle 监听和EM服务异常的解决
- apache2上面开启git服务后,客户端提示SSL23_GET_SERVER_HELLO的解决记录
- Mapreduce从HBASE抽取数据,生成搜索下拉服务数据,hadoop jar 调用异常问题解决
- WCF 连接服务超时异常解决