web-dev-qa-db-ja.com

ipsetがcrontabから実行されていません

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タスクからは実行されません。どうして?

1
SpaceDog

シェルは、環境によって設定されたipsetを調べることで、実行可能ファイル(PATHなど)の場所を認識します。 cronは同じ環境を共有していません。 crontab(またはスクリプト)の先頭にこれを追加すると、期待どおりにコマンドを見つける場所がわかります。

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
1
Chris Down

答えが違うことは知っていますが、組み込みコマンドを使わない理由はありますか?

このようなものはcrontabです

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

そして

ipset save -f /ip/ipall.txt
1
cybernard