搜索并终止进程,并在 bash 脚本上启动新进程

Search and kill process, and start new process on bash script

我需要一个脚本来每小时 运行 启动一个新进程。

我创建了一个 bash 脚本,通过 cron 计划每小时 运行。它只在第一次有效,否则会失败。

如果 运行 来自 shell,则效果完美。

这是脚本:

#!/bin/sh

ps -ef | grep tcpdump | grep -v grep | awk '{print }' | xargs kill
sleep 2
echo "Lanzando tcpdump"
tcpdump -ni eth0 -s0 proto TCP and port 25  -w /root/srv108-$(date +%Y%m%d%H%M%S).smtp.pcap

定时任务

@hourly /root/analisis.sh > /dev/null 2>&1

为什么 cron 作业失败?

失败可能与 cron 作业永远不会完成有关 - 您正在前台启动一个新的 tcpdump,它将永远 运行。

试试这个简化的脚本:

#!/bin/bash
killall tcpdump
tcpdump -ni eth0 -s0 proto TCP and port 25  -w /root/srv108-$(date +%Y%m%d%H%M%S).smtp.pcap&

这是 OP added 对问题本身的回答。

评论后更正脚本(效果很好)

#!/bin/bash

pkill -f tcpdump
/usr/sbin/tcpdump -ni eth0 -s0 proto TCP and port 25  -w /root/srv108-$(date +%Y%m%d%H%M%S).smtp.pcap

也就是说,我只需要使用tcpdump的完整路径。