我有以下脚本
$cat capture.sh
TIME=$(date +"%H-%M-%d-%m-%y")
IP="203.208.198.29"
PREFIX=$TIME$IP
tshark -f "udp" -i eth0 -w /root/captures/$PREFIX.cap&
pid=$!
sleep 2m
kill $pid
当我从 shell 执行它时它运行良好。
但是当我将其添加到 cron 选项卡时什么也没有发生。
我的 crontab 条目: 1 */2 * 2 3,4,5 sh /root/capture.sh
tail /var/log/cron
表示命令已经执行。
但什么也没发生。我已经为capture.sh设置了“全部”的可执行权限,并为/root/captures目录设置了“全部”的写入权限。
提前致谢
答案1
您的PATH
变量可能不是您期望在 cron 内部的变量。
使用脚本中每个可执行文件的完整路径,或者在 crontab 或脚本中手动设置路径。
此外,更好的停止方法tshark
是使用内置功能:
-a <capture autostop condition>
duration:value Stop writing to a capture file after value seconds
have elapsed.
另外 #2:添加 shebang 行 ( #!
)
答案2
Cron 将限制 cron 任务使用的路径。尝试使用 /usr/sbin/tshark,而不仅仅是 tshark。您可以通过以下方式检查 tshark 的位置which tshark
答案3
查看您的脚本,我发现您正在尝试捕获两分钟的流量并写入文件。您真的想让 cronjob 在二月的每个星期三/星期四/星期五每隔一小时的整点 1 点运行吗?我猜您希望它每 2 分钟运行一次...
来自crontab(5)
(可以用 读取man 5 crontab
)
cron(8) examines cron entries once every minute.
The time and date fields are:
field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sun, or use names)
A field may be an asterisk (*), which always stands for "first-last".
答案4
这是因为没有找到 tshark 命令,您有两个选项可以修复它。
在 crontab 中定义路径
PATH=$PATH:/路径到 tshark
*/2 * 2 3,4,5 sh /root/capture.sh
在脚本中使用 tshark 的完整路径。
选项 #1 是首选方法