我有一个包含 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