Ipsetを使用してブロックしたいIPをファイルの1行に1つずつ含むこのtxtファイルがあります。
基本的にプレーンなtxtファイルから読み取り、配列を作成するこの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タスクからは実行されません。どうして?
シェルは、環境によって設定されたipset
を調べることで、実行可能ファイル(PATH
など)の場所を認識します。 cron
は同じ環境を共有していません。 crontab(またはスクリプト)の先頭にこれを追加すると、期待どおりにコマンドを見つける場所がわかります。
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
答えが違うことは知っていますが、組み込みコマンドを使わない理由はありますか?
このようなものはcrontabです
@reboot /usr/sbin/ipset restore -f /ip/ipall.txt
そして
ipset save -f /ip/ipall.txt