Solaris系统cron服务异常解决记录
自从公司政策变化,将服务器转到部门后,像我这种小白总会遇到各种各样维护的问题,这不,最近两月发现NIS服务工作异常,不能实时同步远端LDAP数据了。由于NIS和DNS服务器系统是古老的SunOS 5.10,谁用谁知道,我是真的不喜欢啊~开始比较懒,请IT帮忙,但各种推诿,一个月过去问题还在,心里万千只草泥马奔腾,好吧,无奈之下只能自己硬着头皮上了。
本文记叙了解决问题的整个过程,比较啰嗦,如果您只想看问题是如何解决的,请直接跳转到本文末尾的第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 -e2090
鸟哥的书上明明是说这样可以编辑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 cronroot 317 1 0 Oct 01 ? 3:25 /usr/sbin/cronroot 4586 4572 0 14:56:45 pts/4 0:00 grep cron
#
# ptree 317
317 /usr/sbin/cron949 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@guyongqiangx951 /usr/local/bin/perl -T /tools/logs/filers/bin/chk.nac.messages.pl -s shenzhen1878 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@guyongqiangx1880 /usr/local/bin/perl -T /tools/logs/filers/bin/chk.nac.messages.pl -s shenzhen2871 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@guyongqiangx2873 /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 swapPID USERNAME LWP PRI NICE SIZE RES STATE TIME CPU COMMAND9663 root 7 59 0 9176K 6848K sleep 369:18 0.00% named11148 root 2 59 0 5984K 3508K sleep 31:20 0.00% automountd271 root 1 59 0 5464K 1996K sleep 25:11 0.00% ypserv398 root 15 59 0 4996K 3156K sleep 19:02 0.00% syslogd420 root 1 59 0 0K 0K sleep 12:47 0.00% snmpd421 root 1 59 0 6928K 3104K sleep 7:45 0.00% httpd9 root 15 59 0 10M 9340K sleep 5:32 0.00% svc.configd317 root 1 59 0 2548K 1336K sleep 3:24 0.00% cron7 root 13 59 0 10M 9184K sleep 2:27 0.00% svc.startd21473 root 30 59 0 5068K 4228K sleep 2:21 0.00% nscd417 root 15 59 0 13M 9064K sleep 2:19 0.00% fmd589 root 1 59 0 2132K 1480K sleep 1:41 0.00% master237 daemon 1 59 0 2676K 1356K sleep 1:24 0.00% rpcbind1 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+) 》
Solaris系统cron服务异常解决记录相关推荐
- IE8下JQuery clone 出的select元素使用append添加option异常解决记录
IE8下JQuery clone 出的select元素使用append添加option异常解决记录 参考文章: (1)IE8下JQuery clone 出的select元素使用append添加opti ...
- HBase中此类异常解决记录org.apache.hadoop.ipc.RemoteException(java.io.IOException):
HBase中此类异常解决记录org.apache.hadoop.ipc.RemoteException(java.io.IOException): 参考文章: (1)HBase中此类异常解决记录org ...
- 交管12123服务器维护,交管12123服务异常怎么办?交管12123 APP服务异常解决方法...
交管12123APP是可以随时为你查询违章.缴纳违法费用等服务的软件,也是一款专门为了驾校考试研发的软件,但是最近很多用户发现登录时会遇到服务异常的问题,那么,要怎么解决这个问题呢?接下来,小编就为大 ...
- Unexpected Exception caught setting 异常解决记录
一,Unexpected Exception caught setting 异常 今天在做crm项目时,想要实现一个客户列表的分页查询,但在action总是不能成功把分页数据带回给jsp,初次查询之后 ...
- oracle windows系统oracle服务消失解决办法
打开CMD (管理员权限) 切换到oracle 的bin目录 oradim -NEW -SID XE -STARTMODE manual -PFILE "E:\oraclexe\app\o ...
- 交管123缴费显示代理服务器异常,交管12123服务异常怎样办 交管12123 APP服务异常处理办法...
软件安装:手机应用宝 随着科技的发展,手机在我们的生活中扮演了很重要的角色,手机在便利我们生活的同时,也会对我们造成很重要的影响.手机已经成为了我们的必需品,不仅是通讯工具,而且很大程度上都是娱乐功能 ...
- 注册交管12123服务器异常,交管12123提示服务异常怎么解决
交管211312123违章查询显示服务异常可能有以下几点5261原因:1 .用网4102页版本的12123进入,绑定驾驶证,需要再次绑定:16532.更换驾驶证,驾驶证的档案编码不一样,要把驾驶证解绑 ...
- 乐视账号服务器关闭,乐视手机恢复出厂设置之后服务异常怎么办_无法登录乐视帐号解决办法_智能家...
近期由于乐视账号服务器调整,出现了乐视手机重置后登录不了乐视账号,乐视手机恢复出厂设置之后服务异常是什么原因?小明同学为大家带来了无法登录乐视帐号解决办法... 乐视手机无法登录乐视帐号解决办法 乐视 ...
- 记录一次cefsharp1输入法在win7下异常解决定位
最近几天都被基于cefSharp封装的浏览器控件搞疯了!对于cefSharp基本满足当前所做项目的需求,但是有一个问题一直困扰我,那就是系统中偶尔会出现输入法不能转换到中文.而且这个问题似乎没有什么规 ...
- task文件服务器无法输入,Win10系统无法启动task scheduler服务的解决方法
Win10无法启动"task scheduler服务"怎么办?task scheduler是一个任务调度程序,用户可以使用task scheduler自动运行计算机任务.在Win1 ...
最新文章
- ubuntu 大小写指示的小工具
- vivox50pro鸿蒙系统,vivo X50 Pro最适合用来拍风景,看看网友的作品就知道了
- object转成实体对象_Object.assign 原理及其实现
- [转]对贡献有激情,对回报有信心
- 使用AspectJ审计Spring MVC Webapp。 第1部分
- ZooKeeper -- API文档
- delphi7 安装delphi 5 delphi 6控件
- Leetcode刷题系列汇总
- Sublime Text 教程
- pytorch 与 numpy 的相互转换
- java.lang.ClassCastException: org.apache.hadoop.mapreduce.lib.input.FileSplit cannot be cast to...
- 010-flutter dart代码后台执行,没有界面的情况下
- 嵌入式驱动学习之PWM蜂鸣器驱动
- 测试用例设计—场景分析法
- Web3 | DID赛道之 Galxe(原 Project Galaxy)
- hadoop集群搭建完整教程,java电商项目面试技巧
- Kubernetes 三大探针及探针方式
- EasyTouch API接口简介
- 开发智力的好东西~~~给孩子玩
- 辰视将携3D视觉新技术新产品参加2021广东工博会暨广东自动化展