cron - 종료 코드 및 grep에 대한 if 문이 포함된 bash 스크립트

cron - 종료 코드 및 grep에 대한 if 문이 포함된 bash 스크립트

나는 Linux와 bash 세계의 상대적인 "초보자"이고 이것을 이해할 수 없습니다.

이 외에도 "string"이 존재하지 않는 경우 iptables를 수정하고 싶은데 작동하지 않는 것 같습니다. if 문, 종료 코드, 구문 또는 sudo 권한 등으로 인해 발생한 것인지 확실하지 않습니다.

cron을 통해 스크립트가 자동으로 실행되면 찾고 있는 문자열이 포함되어 if있어도 iptables해당 절이 실행됩니다 . 이것은 검증되었습니다

  1. 터미널에서 예약된 실행 전후의 초를 인쇄합니다.
  2. echo "this" >>/log/file.logif 절에 하나를 추가합니다.

1번을 선택하세요:

#!/bin/bash
iptables -L -n -v | grep 8.8.8.8
if [ $? != 0 ]; then
    command-to-perform
fi

2번:

#!/bin/bash
iptablesvar=$(iptables -L -v -n)
if [[ $iptablesvar != *"8.8.8.8"* ]]; then
    command-to-perform
fi

다음 줄을 사용하여 (sudo) crontab에 의해 트리거되는 두 가지 방법을 모두 시도했습니다.

*/1 * * * * /bin/bash /home/username/path/to/script-file.sh

나를 혼란스럽게 하는 것은 다음과 같이 터미널에 직접 입력할 때 위의 두 옵션이 모두 작동하는 것 같다는 것입니다.

sudo iptables -L -n -v | grep 8.8.8.8
if [ $? != 0 ]; then echo "not found" ;fi
if [ $? == 0 ]; then echo "found" ;fi

var=$(sudo iptables -L -n -v)
if [[ $var != *"8.8.8.8"* ]]; then echo "n" ;fi
if [[ $var == *"8.8.8.8"* ]]; then echo "y" ;fi

무엇을 제공합니까?

해당되는 경우 내 시스템은 새로운 Linux Mint 19.3 Tricia입니다.

답변1

이 질문에 직접 답변하겠습니다. 모든 크레딧@스틸드라이버~의논평:
iptablescron에 없습니다 PATH. 전체 경로를 포함하도록 명령을 변경하십시오 /sbin/iptables.

관련 정보