Shell循环时编写脚本

时间:2014-05-29 06:44:27

标签: linux bash shell logging

 #!/bin/sh
   export TERM=linux
   start()
   {
   logger "starting logs..."
   NOW=$(date +"%F")
   FILE="log-$NOW"
   sh -ci "myapp -w /opt/home/logs/$FILE &> /dev/tty${#} &" >> /dev/null
   wait
   logger "myapp started"
   }

   stop()
   {
   kill -9 $(pidof myapp)
   }
   CDAY=$(date +"%d")
   start
   while [1]; do
        if [ $CDAY -ne $(date +"%d") ]
        then
                logger "loop"
                CDAY=$(date +"%d")
                stop; start
        fi
   done

逻辑是下一个: myapp开始记录某个进程 如果当前日期已更改(第二天到来)脚本将停止myapp并再次启动它以创建新的日志文件

我是shell脚本的新手,它不能正常工作,我在哪里错了?

UPD:似乎while循环不起作用,脚本不会进入,日志中没有logger "loop"

UPDD:已完成 修正了while循环的语法 while :它开始起作用了。 谢谢大家!

1 个答案:

答案 0 :(得分:1)

我在黑暗中的狂野刺杀将删除最后一行的fi,因为它似乎没有匹配的if你可能会因为在你的while循环中添加sleep 120左右而受益,否则你将浪费CPU时间尽可能快地完成它而几乎没有上升空间。错误可能在if [ $CDAY !=$(date +"%d") ],我相信您必须在运营商的任何一侧都有空格,如下所示:if [ $CDAY != $(date +"%d") ]。由于您正在进行整数比较,因此您可能还应将运算符更改为-ne,因为!=用于字符串比较。我建议将%d更改为%M,以便更快地滚动,这有助于确保其有效。 (%F也需要更改为更具体的内容,例如%c)。