ipset 未从 crontab 执行

ipset 未从 crontab 执行

我有一个包含 IP 的 txt 文件,每行文件一个,我想使用 ipset 阻止它。

我有这个 bash 脚本,它本质上是从纯文本文件中读取并构造一个数组。然后它迭代数组元素并将每个元素添加到我为此目的创建的 ipset 中。

问题是这样的:如果我从终端手动执行脚本,它工作得很好,但是当我添加脚本以使用 crontab 定期运行时,脚本会运行,但 IP 不会添加到 ipset 中。

这是脚本的相关部分。

index=0
while true; do
  ipset -quiet -A myIpset $[arrayOfIPS[$index]}
  index=$[$index + 1]
  if [ "$index" -gt "$lastIndexOfArray" ];
  then break
  fi 
done

这在终端上运行完美,但不能从 crontab 任务运行。为什么?

答案1

ipset您的 shell通过查看PATH由您的环境设置的 来知道在哪里可以找到可执行文件(例如)。cron不共享相同的环境。将其添加到 crontab (或您的脚本)的顶部应该告诉它在哪里可以找到您期望的命令:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

答案2

我知道答案不同,但是您不使用内置命令有什么原因吗?

比如这是 crontab

@reboot /usr/sbin/ipset restore -f /ip/ipall.txt

ipset save -f /ip/ipall.txt

相关内容