1. 程式人生 > >Solaris系統cron服務異常解決記錄

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' [email protected] # # 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 [email protected]
      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 [email protected]
      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 [email protected]
      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
  1. 根據日誌資訊進行百度,發現cron佇列滿了
  2. 用ptree命令查詢cron服務相關程序,發現chk.nac.messages.pl指令碼相關的任務特別多
  3. 手動檢查chk.nac.messages.pl任務的執行,發現程序掛起來了。因此根源是cron在其佇列中不斷定時建立這個任務,但任務不會結束,導致cron佇列裡的任務越來越多,最後佇列滿了無法再啟動新的任務
  4. 取消失敗任務,殺死cron佇列中的掛起程序,cron服務正常運作。

5. 官方Solaris管理手冊系列

相關推薦

Solaris系統cron服務異常解決記錄

自從公司政策變化,將伺服器轉到部門後,像我這種小白總會遇到各種各樣維護的問題,這不,最近兩月發現NIS服務工作異常,不能實時同步遠端LDAP資料了。由於NIS和DNS伺服器系統是古老的SunOS 5.10,誰用誰知道,我是真的不喜歡啊~開始比較懶,請IT幫忙,但

防火牆做對映後ftp服務異常問題記錄

組網介紹 防火牆作為出口(GigabitEthernet0/0/1),下掛ftp伺服器192.168.0.10 在防火牆做對映 nat server 0 protocol tcp global interface GigabitEthernet0/0/1 100

電腦系統字體異常解決辦法,影響wifi上網、notepad中文代碼變方塊等

右鍵 發現 代碼 軟件 ges proc 原因 配置 shadow 魅力網絡這兩天遇到一個電腦的嚴重問題的,一是筆記本wifi連接不上,一直出現感嘆號,只能收到手動配置才能上網,檢測了很多地方沒發現網絡配置的不對地方。再就是電腦經常報錯,瑞星殺毒都是?號了,右鍵問號,卸載軟

postfix和dovecot服務異常,重啟服務後又會自動停掉的解決辦法

maillog日誌空的1、首先排除/var/log/mailog日誌,但是發現是空的。2、查看rsyslog日誌配置文件,主要註意$IncludeConfig和mail這兩行。[root@gxm log]# vi /etc/rsyslog.conf $IncludeConfig /etc/rsyslog.d/

使用Ghost版本Windows7系統下載安裝virtualBox和centos7異常解決

解決方案 size 引用 serve 重新 reg tro round theme 使用Ghost版本Windows7系統下載安裝virtualBox和centos7異常解決: 下載安裝運行virtualBox時出現獲取VirtualBox對象嚴重錯誤(如圖): 解

win10win7開啟軟體提示系統資源不足,無法完成請求服務解決方法

有些win7、win10使用者莫名的遇到了一個問題,就是安裝部分軟體的時候提示系統資源不足,無法完成請求服務,剛開始以為是系統缺少了某些元件,結果發現是國外防毒邁克菲(McAfee)在搗鬼。

Gem Windows 環境新增 Ruby China Gems 源的 SSL 異常問題解決記錄

#ruby 新增gem源的ssl異常問題解決記錄 異常SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed 問題現象: gem so

服務異常系統排查順序

服務異常時首先檢查監控,觀察QPS,RT以及成功率是否有抖動,如果沒有明顯抖動,再檢查伺服器狀態 CPU負載 使用top命令或uptime命令檢視CPU負載 top - 18:06:34 up 35 days, 3:53, 1 user, load avera

記錄一次因伺服器關機造成的Git服務異常

  環境:Ubuntu 16.04 、Git 2.7.4 事情原因:之前公司使用的是SVN版本控制器,後來,因為分支的需求,所以搭建了Git; 今天早上因為Git伺服器上tomcat服務出現異常,需要手動重啟伺服器;所以,同事手動重啟了伺服器;但是恰巧剛好另一個同事,正在pus

基於PySpark的網路服務異常檢測系統 (四) Mysql與SparkSQL對接同步資料 kmeans演算法計算預測異常

def get_current_timestamp(): 2 """ 3 獲取當前時間戳 4 :return: 5 """ 6 return int(time.time()) * 1000 7 8 9 def convert_datetime_to_

Android 修改系統字型大小,導致頁面展示異常解決方案

Android系統預設是允許修改系統本身的字型大小的,導致頁面展示異常。 頁面展示異常是因為系統字型大小影響到了程式中字型的單位sp,所以解決此問題的方案1是,將佈局中字型大小的單位sp換成dp 解決方案2:重寫Activity或Application中的getResou

電腦系統字型異常解決辦法,影響wifi上網、notepad中文程式碼變方塊等

魅力網路這兩天遇到一個電腦的嚴重問題的,一是筆記本wifi連線不上,一直出現感嘆號,只能收到手動配置才能上網,檢測了很多地方沒發現網路配置的不對地方。再就是電腦經常報錯,瑞星防毒都是?號了,右鍵問號,解除安裝軟體也很多都是亂碼或者問號,解除安裝了很多軟體都看著有亂碼,部分系統文字也出現了亂碼,魅力網路這時心想

WCF 連線服務超時異常解決

做了一個WCF專案,客戶端訪問服務的時候,查詢速度較慢或者資料量較大的時候,客戶端會丟擲超時異常的錯誤,而超時的事件預設是1分鐘,解決查詢大資料量不拋超時異常的方法: 在WCF客戶端的服務代理類中設定OperationTimeout時間。 例如設定OperationTime

服務之 antlr/RecognitionException 異常解決方案

問題概述: 在微服務呼叫中涉及到spring-cloud-data-jpa操作,這時候在服務端會出現這種異常如下 org.springframework.web.util.NestedServletException: Handler dispatc

記錄一次java.lang.ClassCastException的java型別轉換異常解決方案

自己的專案中,有個定時任務的模組,裡面需要將返回的物件強轉為某個實體類JobModel,可是在轉換的過程中,卻報出了java.lang.ClassCastException: com.jy.admin.server.mo

線上系統報ERR Connection timed out異常解決過程

1 發現線上redis問題:ERR Connection timed out 近日,剛上線一個系統,上線第二天去ELK日誌系統(公司的日誌系統是對開源實時日誌分析ELK平臺進行了改造而來的)跟蹤一下線上情況,一時發現丟擲了很多redis異常: 再仔細一看: 發現連線r

關於jeesite登入“顯示系統出現點異常,請稍後再試”問題解決方案

2018-04-19 14:13:36,851 DEBUG [modules.sys.dao.UserDao.getByLoginName] - ==> Parameters: admin(String), 0(String)org.apache.shiro.authc.AuthenticationEx

Linux系統奇怪的磁碟佔用解決記錄

近日我所維護的一臺伺服器執行出現了異常,翻開程式執行日誌,初步發現問題是某個過程無法建立新臨時檔案。 再仔細閱讀日誌,看到了Java報出的Java.io.IOException; there is not enough space on the disk。 那麼問題就

Codeigniter 無法記錄終止性錯誤和異常解決辦法

提醒: - 這裡討論的終止性錯誤指導致php執行失敗的錯誤,例如E_Error,像E_NOTICE、E_WARNING這樣的報錯Codeigniter框架本身可以完美的捕獲,因此不在討論範圍內。 - 本文已Codeigniter 2.2為例,

Android6.0以上應用在長時間在後臺,因為記憶體不足導致系統回收記憶體,當再次啟動應用出現Fragment重疊或者空白、異常解決方案(提供模擬記憶體不足導致系統回收記憶體的方案)。

  Android6.0以上應用在長時間在後臺,因為記憶體不足導致系統回收記憶體,當再次啟動應用出現Fragment重疊或者空白解決方案。首先提供一個方法模擬記憶體不足導致系統回收記憶體的方案:開啟Android Studio -->Tools-->Android