用于检查davmail pid的新cron脚本,如果运行什么也不做。如果没有运行重启

时间:2017-08-28 21:01:03

标签: bash

根据我找到谷歌搜索的脚本采用这个脚本,但是如果运行该脚本,则该脚本会将其杀死。如果Davmail没有运行,则脚本无法启动它。我究竟做错了什么?我已通过运行pgrep -f davmail | wc -w

验证了状态代码
    #!/bin/bash
case "$(pgrep -f davmail | wc -w)" in

0) echo "Restarting DavMail:        $(date)" >> /var/log/davmail.txt
   /home/user/Downloads/davmail-linux-x86_64-4.8.0-2479/davmail.sh &
   ;;
1) # all ok
   ;;
*) echo "Removed double Davmail:    $(date)" >> /var/log/davmail.txt
   kill $(pgrep -f davmail | awk '{print $1}')
   ;;
esac

1 个答案:

答案 0 :(得分:1)

  

我已通过运行pgrep -f davmail | wc -w

验证了状态代码

这不是您验证状态代码的方式。 您可以通过检查$?

的值来验证状态代码

但这里真正的问题是wc -w的输出用空格填充,你在case "..." in中双引号, 所以只有*)才匹配。

另一个问题是虽然评论说"删除了双重Davmail", 命令会杀死所有匹配的进程, 不只是"双重Davmail"。 如果你打算保留一个进程并杀死所有其他进程, 你需要解决这个问题。

以下是解决上述问题的一种方法:

count=$(pgrep -f davmail | wc -w)
if [ $count = 0 ]; then
    echo "Restarting DavMail:        $(date)" >> /var/log/davmail.txt
    /home/user/Downloads/davmail-linux-x86_64-4.8.0-2479/davmail.sh &
elif [ $count != 1 ]; then
    echo "Removed double Davmail:    $(date)" >> /var/log/davmail.txt
    kill $(pgrep -f davmail | sed -e 1d)
fi