【发布时间】:2014-05-29 06:44:26
【问题描述】:
#!/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 : 它开始工作。
谢谢大家!
【问题讨论】:
-
请描述您的脚本如何无法正常工作。
-
我想你忘记了
$:/dev/tty${#}假设你想要传递的参数数量。 -
@gareth_bowles 我昨天开始了它,并假设今天我将看到 5 月 28 日和 29 日的 2 个日志文件。但我只看到 28 日的日志文件,myapp 正在继续写入其中
-
@RedX thx,会更正它
-
既然你想要一个数字匹配,你应该做
(( $CDAY != $(date +"%d") )),为了更好的风格,一个名为 stop 的函数也不应该启动。要么重命名为restart,要么在while循环中使用stop; start。