【发布时间】:2017-02-17 19:51:43
【问题描述】:
我需要一个脚本来每小时运行一个新进程。
我创建了一个 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
定时任务
@hourly /root/analisis.sh > /dev/null 2>&1
为什么 cron 作业失败了?
【问题讨论】:
-
这不是 Bash 脚本(shebang 另有说明)。
-
How does it fail? 你不能用
killall,或者至少pidof吗? -
要尝试自己调试,请将 cron 行更改为将 stdout 和 stderr 记录到文件中,然后运行 set -x 或在第一行添加 -x 以打开调试。 Cron 没有与常规 shell 命令相同的环境,因此您可能只是缺少路径中的命令。尝试为 kill 行中的命令提供完整路径。
-
哦,调试的时候,复制kill行,看看每一步的输出。可能 ps 根据环境有不同的输出格式。在cron中设置命令每分钟运行一次,可以快速调试。
-
请不要在标题中添加“已解决”。相反,发布解决方案的答案:Can I answer my own question?
标签: linux bash shell cron kill