搜索并终止进程,并在 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
的完整路径。
我需要一个脚本来每小时 运行 启动一个新进程。
我创建了一个 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
的完整路径。