作者 主題: ps指令,加到crontab後..怎都會少捉一行呢  (閱讀 2327 次)

0 會員 與 1 訪客 正在閱讀本文。

ardent

  • 可愛的小學生
  • *
  • 文章數: 3
    • 檢視個人資料
試著把當前的記憶體使用,記錄前10名
ps aux|awk -F' ' '{print $4"      "$3"    "$1"    "$11}'|sort -r|sed '2,11!d'
運作正常

寫成一個Shell
#!/bin/sh
HO=$(hostname)
DA1=$(date +"%Y-%m-%d")
DA2=$(date +"%H:%M")
TI="MEM-TOP"
PA="/tmp/txt/"
MEM=$(ps aux|awk -F' ' '{print $4"      "$3"    "$1"    "$11}'|sort -r|sed '2,11!d')
echo "$MEM      $DA2" >> $PA/$HO.$TI.$DA1
echo "$MEM"
畫面輸出及寫入檔案的資料都是正確,有把排名1-10寫入

放到/etc/crontab 後
*/5 * * * * root /tmp/ten.pl
寫入檔案的資料,就會變成2-11的排名

怎會這樣呢 ?

sitediy

  • 活潑的大學生
  • ***
  • 文章數: 426
    • 檢視個人資料
你的程式  我沒有全部跑過   直覺上問題是出在 sed '2,11!d'

把你的這行  ps aux|awk -F' ' '{print $4"      "$3"    "$1"    "$11}'|sort -r|sed '2,11!d'

改成    ps aux|awk -F' ' '{print $4"      "$3"    "$1"    "$11}'|sort -r | grep -v 'COM' | sed '1,10!d'

你試試   我沒放在crontab跑過

good luck

ardent

  • 可愛的小學生
  • *
  • 文章數: 3
    • 檢視個人資料
剛在家裡的電腦上,試跑了一下...放在crontab 裡,可以正確的跑出來了 !!
在此先感謝 sitediy 大大.

不過,看起來
我放在cron裡執行時,第一行欄位名稱,被sort到最後一行了嗎 ?
為什麼 ??

sitediy

  • 活潑的大學生
  • ***
  • 文章數: 426
    • 檢視個人資料
剛在家裡的電腦上,試跑了一下...放在crontab 裡,可以正確的跑出來了 !!
在此先感謝 sitediy 大大.

不過,看起來
我放在cron裡執行時,第一行欄位名稱,被sort到最後一行了嗎 ?
為什麼 ??

昨天在家使用fedora來測    沒注意到欄位名稱是否被sort到最後一行

早上看到你提出的問題    使用debian測了一下    過然是被sort到最後一行了

sort  預設是以文字來排序   以你的例子來說   是以print $4昨為基準來排序

這樣暸嗎??   


你的程式執行出來有很大的問題   1-10排名不是正確的   我是下了 ps aux才發現的

請在改成 

ps aux|awk -F' ' '{print $4"      "$3"    "$1"    "$11}'|sort -t ' ' -k 1 -nr | grep -v 'COM'|sed '1,10!d'


這裡我不做說明了    你實際跑過就知道為何我說你之前的1-10名不正確了

註: 我還是沒放在crontab跑過

ardent

  • 可愛的小學生
  • *
  • 文章數: 3
    • 檢視個人資料
早上在公司跑的時候,發現到sort 沒加 -n 的問題,就真的是照字元一個一個排..
不過,加了-n後..它就有依照 整串數值 來排了

不過..不太懂的是另外的兩個參數
-t 跟-k的使用時機
剛用了家裡的vm測了一下...感覺不出來,可能是第2欄的數字都是0.0
明天到公司,再照學長的語法做一次試試看

感謝