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