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

时间:2017-02-15 05:47:32

标签: linux bash shell cron kill

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

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

如果从shell运行,它可以很好地工作。

这是脚本:

#!/bin/sh

ps -ef | grep tcpdump | grep -v grep | awk '{print $2}' | 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

的cron

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

为什么cron作业失败了?

2 个答案:

答案 0 :(得分:1)

这是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的完整路径。

答案 1 :(得分:0)

失败可能与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&