根据我在谷歌上搜索到的一个脚本采用了这个脚本,但是如果 Davmail 正在运行,该脚本就会杀死它。如果 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
最佳答案
I've verified the status codes by running
pgrep -f davmail | wc -w
这不是验证状态代码的方式。
您可以通过检查 $?
的值来验证状态代码。
但这里真正的问题是 wc -w
的输出用空格填充,并且您在 case "..."in
中对值进行了双引号,
因此只有 *)
会匹配。
另一个问题是,虽然评论说“Removed double 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
关于bash - 新的 cron 脚本用于检查 davmail pid,如果正在运行则不执行任何操作。如果没有运行重启,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45927465/