2016-10-25 67 views
1

我已經編寫了一個bash腳本,用於將特定進程的日期,時間,CPU和MEM用法輸出到文件中。我做了一個「topLogger.service」服務,它運行並輸出日期和時間到文件中,但輸出文件中沒有顯示最高輸出(CPU和MEM)。從systemd服務調用「top」命令

當我剛剛從bash shell運行bash腳本時,它工作得很好!

sudo ./topLoggerScript.sh 

我相信這條線可能是罪魁禍首,但我不知道如何解決這個問題。

/usr/bin/top -n 1 | grep service_to_monitor 

這裏是整個腳本:

#!/bin/bash 

cpu=10 
mem=11 
cur_date=$(date +"%Y-%m-%d") 
echo "starting date is $cur_date" 

# Create starting file if todays file does not exist 
if [ ! -e /file/location/$cur_date.txt ] ; then 
    echo "DATE TIME CPU MEM" > /file/location/$cur_date.txt 
fi 

    while true 
       do 
        STRING=$(/usr/bin/top -n 1 | grep service_to_monitor) 
        arr=($STRING) 

        next_date=$(date +"%Y-%m-%d") 

        if [ "$cur_date" != "$next_date" ];then 
        # Day changed. Create a new file using cur_date. 
        echo "DAY CHANGE" 
        echo "DATE TIME CPU MEM" > /file/location/$cur_date.txt 

        # And change prev_date to cur_date 
        cur_date=$next_date 
        fi 

        sudo echo $(date +"%Y-%m-%d %H-%M-%S") ${arr[cpu-1]} ${arr[mem-1]}>>/file/location/$cur_date.txt 
        sleep 5 
    done 

這裏是我的服務文件的權限:

-rw-rw-r-- 1 root root 121 Oct 25 15:54 topLogger.service 

這裏是topLogger.service文件本身:

[Unit] 
    Description=Resource monitor for a specific process 

    [Service] 
    ExecStart=/path/to/script/logResourceUsage.sh 

回答

1

問題是top -n 1在打印輸出後不會退出,如說echo那樣。您編寫腳本的方式需要一個過程將這些值作爲純文本打印出來,然後退出,然後將其傳送至greptop -l 1 -n 1可能更理想,這將打印並退出適當。

+0

這是mac版本的top,在debian中例如top -n 1 exit在一次迭代之後。 –

+0

@LucianoAfranllie啊你是對的。 –

+0

感謝您的評論,僅僅爲了重申一下,這個腳本在bash中運行時完全可行。作爲服務運行時,它還會將日期/時間輸出到指定的文件。問題是MEM和TOP數據在作爲服務運行時不會輸出到文件中,而是在bash中運行。 – Xachuous