#!/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 循环不起作用,脚本没有进入其中,logread 中没有 logger "loop"
UPDD:完成
将 while 循环的语法更正为
while :
然后它开始工作。
谢谢大家!
最佳答案
我在黑暗中的大胆尝试是删除最后一行的 您可能会受益于向 while 循环添加 fi
,因为它似乎没有匹配的 if
。sleep 120
左右,否则您将浪费 CPU 时间来尽可能快地完成它而没有什么好处。错误可能与 if [ $CDAY !=$(date +"%d") ]
相关,我相信您必须在运算符的两边留一个空格,如下所示:如果 [ $CDAY != $(date +"%d") ]
。由于您正在进行整数比较,您可能还应该将运算符更改为 -ne
,因为 !=
用于字符串比较。我建议将 %d
更改为 %M
以便它可以更快地滚动,这有利于确保其正常工作。 (%F
也需要更改为更具体的内容,例如 %c
)。
关于linux - Shell 脚本 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23927321/