
1行に1つずつIPを含むtxtファイルがあり、ipsetを使用してそれをブロックしたいと思います。
デフォルトでは、プレーンテキストファイルを読み取り、配列を構成するbashスクリプトがあります。次に配列要素を繰り返し、この目的で作成したIPsetに各要素を追加します。
問題はこんな感じです。端末で手動でスクリプトを実行するとうまくいきますが、crontabを使用して定期的に実行するスクリプトを追加するとスクリプトは実行されますが、IPsetにIPは追加されません。
これはスクリプトの関連部分です。
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
シェルは、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