我在/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
答案 0 :(得分:0)
这一行:
/home/nzbget/hdd_spindown.sh > /var/log/spindowncheck.log &
破坏日志文件;将>
替换为>>
。
此外,作为chepner noted,如果您希望进行shell算术,请使用(POSIX兼容)$((…))
表示法,替换:
i=$i+1
使用:
i=$(($i+1))
或使用Bash扩展程序,例如:
((i=i+1))
((i+=1))
((i++))
在双括号内,您可以使用分配周围的空格。在Bash中,您不必明确地将$
放在变量名称前面(除非您要取消引用数组元素,或者......)。在双括号内的赋值中,必须省略LHS变量名之前的$
,就像在shell赋值中一样。