linux - Shell 脚本 while 循环

标签 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 循环不起作用,脚本没有进入其中,logread 中没有 logger "loop"

UPDD:完成 将 while 循环的语法更正为 while : 然后它开始工作。 谢谢大家!

最佳答案

我在黑暗中的大胆尝试是删除最后一行的 fi,因为它似乎没有匹配的 if 您可能会受益于向 while 循环添加 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/

相关文章:

c - C 中的 wait()。我应该传递什么参数给它

c - 使用个性系统调用使堆栈可执行

linux - 检查从同一 bash 脚本启动的后台进程的运行状态

Linux 狂欢。如果字段完全匹配则删除行

ruby - 如何从 ruby​​ 在远程主机上执行交互式 shell 程序

linux - bash 4.3.42 。 : is/dev/fd/1 incorrect after redirecting or closing stdout?

python - 安装基于 pyproject.toml 的项目所需的错误 : Could not build wheels for aiohttp,

linux - bash 脚本昨天的 zip 文件

android - 如何在没有root权限的情况下运行Android系统应用程序?

linux - 如何通过 SSH 从 jenkins execute shell 进入正在运行的 docker 容器