簡體   English   中英

啟動時Shell腳本覆蓋日志

[英]Shell script overwriting log at start

我在/etc/init.d中有一個啟動程序腳本,該腳本正在調用我的主shell腳本來執行。 然后,主腳本將寫入日志文件。 它應該始終附加到現有的日志文件中。

這是我所進行的設置的結果:

  • 手動啟動主腳本時,它將附加到它使用的日志文件中。
  • 從/etc/init.d作為服務啟動時,它將在第一次啟動時覆蓋日志。

我想念什么? 當作為服務啟動時,為什么會覆蓋日志文件?

這里是啟動腳本:

#!/bin/sh 

SPINDOWNCHECK_BINARY="/home/nzbget/hdd_spindown.sh"

start() {
if [ -e "/tmp/spindowncheck.pid" ]; then
        ## Program is running, exit with error.
        echo "Error! spindowncheck is currently running!" 1>&2
        exit 1
 else
    /home/nzbget/hdd_spindown.sh > /var/log/spindowncheck.log &
    echo "spindowncheck started"
    touch "/tmp/spindowncheck.pid"
fi
}

stop() {
   if [ -e "/tmp/spindowncheck.pid" ]; then
       ## Program is running, so stop it
       killall hdd_spindown.sh

       rm "/tmp/spindowncheck.pid"

       echo "spindowncheck stopped"
   else
       ## Program is not running, exit with error.
       echo "Error! spindowncheck not started!" 1>&2
       exit 1
   fi
}

case "$1" in
   start)
       start
       exit 0
   ;;
    stop)
       stop
       exit 0
   ;;
   reload|restart|force-reload)
       stop
       start
       exit 0
   ;;
   **)

        exit 1
   fi
}

esac

主要腳本如下:

#!/bin/bash

echo "Reading config...." >&2
. /tmp/spindowncheck.conf

logfile='/var/log/spindowncheck.log'

while [ 1 ]
do
        i=0
        for DRIVE in $drives
        do
                DATE=`date +"%Y-%m-%d %H:%M:%S"`
                RESULT_OLD=${RESULT[i]}
                RESULT[$i]=`hdparm -C $DRIVE | grep state`

                if [ "$RESULT_OLD" != "${RESULT[i]}" ]
                        then echo $DATE $DRIVE ${RESULT[i]} >> $logfile
                fi

                i=$i+1
        done

        sleep 10
done

這行:

/home/nzbget/hdd_spindown.sh > /var/log/spindowncheck.log &

破壞日志文件; >>替換>


而且,如chepner 所述 ,如果您希望執行Shell算術運算,請使用(POSIX- compatible$((…))表示法,替換為:

i=$i+1

有:

i=$(($i+1))

或帶有Bash擴展名,例如:

((i=i+1))
((i+=1))
((i++))

在雙括號內,您可以在作業周圍使用空格。 在Bash中,您不必顯式地將$放在變量名的前面(除非您要取消引用數組元素或…)。 在雙括號內的賦值中,必須像在shell賦值中一樣,在LHS變量名之前省略$

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM