根据我找到谷歌搜索的脚本采用这个脚本,但是如果运行该脚本,则该脚本会将其杀死。如果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
答案 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