cron - bash-script com instruções if no código de saída e grep

cron - bash-script com instruções if no código de saída e grep

Sou relativamente 'iniciante' no mundo do Linux e do bash e não consigo entender isso.

Entre outras coisas, quero modificar o iptables se 'string' não existir lá, mas parece não funcionar. Não tenho certeza se isso ocorre por causa das instruções if, código de saída, sintaxe ou permissões sudo ou outras.

Quando o script está sendo executado automaticamente via cron, ele executa a ifcláusula mesmo que iptablescontenha a string que estou procurando. Isto é verificado por

  1. imprimindo iptables no terminal segundos antes e depois de uma execução agendada
  2. adicionando um echo "this" >>/log/file.logà cláusula if.

Pegue 1:

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

Pegue 2:

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

Eu tentei ambos, acionados por (sudo) crontab com a seguinte linha:

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

O que me deixa perplexo é que ambas as opções acima parecem funcionar quando inseridas diretamente no terminal, assim:

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

O que da?

Se for relevante, meu sistema é um novo Linux Mint 19.3 Tricia

Responder1

Eu mesmo responderei isso - todos os créditos para@steeldriverdeComente:
iptablesnão está no cron PATH. Comando alterado para incluir o caminho completo /sbin/iptables.

informação relacionada