![](/img/trans.png)
[英]How to output the start and stop datetime of shell script (but no other log)?
[英]Shell script overwriting log at start
我在/etc/init.d中有一個啟動程序腳本,該腳本正在調用我的主shell腳本來執行。 然后,主腳本將寫入日志文件。 它應該始終附加到現有的日志文件中。
這是我所進行的設置的結果:
我想念什么? 當作為服務啟動時,為什么會覆蓋日志文件?
這里是啟動腳本:
#!/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.