cron - bash-скрипт с операторами if для кода выхода и grep

cron - bash-скрипт с операторами if для кода выхода и grep

Я относительно «новичок» в мире Linux и bash и не могу в этом разобраться.

Среди прочего я хочу изменить iptables, если 'string' там не существует, но это, похоже, не работает. Не уверен, связано ли это с операторами if, кодом выхода, синтаксисом или разрешениями sudo или чем-то другим.

Когда скрипт запускается автоматически через cron, он выполняет ifпредложение, даже если iptablesоно содержит строку, которую я ищу. Это проверено

  1. печать iptables в терминале за секунды до и после запланированного запуска
  2. путем добавления echo "this" >>/log/file.logк предложению if.

Дубль 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

Тогда я сам отвечу на этот вопрос - все заслуги@steeldriver'sкомментарий:
iptablesотсутствует в cron PATH. Изменена команда для включения полного пути /sbin/iptables.

Связанный контент