在开始时将bash脚本发送到后台

时间:2014-01-20 12:00:55

标签: bash background startup

对我上一个问题的所有回复,我已经能够创建一个小脚本来检查我的NAS上的温度,但现在我正在努力将它发送到后台。当我尝试使用

启动我的脚本时
sh temp_check.sh start

我收到指向此行的错误

$0 background &

我无法弄清楚原因:/ 这是我的整个脚本

#!/ffp/bin/sh
#
#check CPU and HDD temperature and shutdown if too hot

#Settings
cpu_high=60
hdd_high=50

NAME="temp_check"
PIDFILE="/var/run/$NAME.pid"

Background() {
   echo $$ >$PIDFILE
   exec >/dev/null 2>&1
   trap "rm -f $PIDFILE ; exit 0" INT TERM EXIT

   while true; do
       STATE=$(hdparm -C /dev/sda1 | grep "drive state" | awk '{print $4}')
       if [ "$STATE" = "active/idle" ]; then
           hdd_temp=$(/usr/local/zy-pkgs/bin/smartctl -A -d marvell /dev/sda | grep 194 | cut -d: -f3 | awk '{print $10}')
           cpu_temp=$(i2cget -y 0x0 0x0a 0x07)
           printf -v cpu_res "%d" "$cpu_temp"
           if [[ $cpu_res -lt $cpu_high && $hdd_temp -lt $hdd_high ]]; then
           #echo "CPU und HDD Temperaturen in Ordnung"
           sleep 30
           else
           halt
           fi
       else
           cpu_temp=$(i2cget -y 0x0 0x0a 0x07)
           printf -v cpu_res "%d" "$cpu_temp"
           if [ $cpu_res -lt $cpu_high ]; then
               #echo "CPU Temperatur in Ordnung - HDD im Standby Modus"
               sleep 30
           else
               halt
           fi
       fi
   done
   }

   case $1 in
       start)
           [ -f $PIDFILE ] && [ -f /proc/` cat $PIDFILE `/cmdline ] && echo "already running.       Aborting." && exit 1
           $0 background &
           echo "Starting $NAME..."
       ;;
       stop)
           kill -9 ` cat $PIDFILE ` >/dev/null 2>&1
           echo "Stopping $NAME ` cat $PIDFILE ` "
       ;;
       status)
           [ -f $PIDFILE ] && [ -f /proc/` cat $PIDFILE `/cmdline ] && echo "running as ` cat $PIDFILE ` " && exit 0
           echo "not running"
       ;;
       background)
           Background
       ;;
       *)
           echo "use $0 [ start | stop | status ]"
       ;;
   esac

感谢任何帮助

干杯 Moritz的

2 个答案:

答案 0 :(得分:0)

一个可能的错误是,脚本不可执行。如果是这种情况,您可以将行修改为

/bin/sh $0 background &

或使用

使脚本可执行
chmod a+x temp_check.sh

答案 1 :(得分:0)

如果你将Background()函数更改为

,也许会有所帮助
Background()
{ (
...
) &
}

然后在“开始”中调用Background。这更简单。