crontab에서 ipset이 실행되지 않았습니다.

crontab에서 ipset이 실행되지 않았습니다.

한 줄에 하나씩 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

관련 정보