Bash 脚本无法作为 cron 任务运行

Bash 脚本无法作为 cron 任务运行

我有以下脚本

$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 命令,您有两个选项可以修复它。

  1. 在 crontab 中定义路径

    PATH=$PATH:/路径到 tshark

    */2 * 2 3,4,5 sh /root/capture.sh

  2. 在脚本中使用 tshark 的完整路径。

    选项 #1 是首选方法

相关内容