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