cron - script bash con declaraciones if en el código de salida y grep

cron - script bash con declaraciones if en el código de salida y grep

Soy relativamente "principiante" en el mundo de Linux y bash y no puedo entender esto.

Entre otras cosas, quiero modificar iptables si la 'cadena' no existe allí, pero no parece funcionar. No estoy seguro si esto se debe a las declaraciones if, el código de salida, la sintaxis o los permisos sudo u otros.

Cuando el script se ejecuta automáticamente a través de cron, ejecuta la ifcláusula incluso si iptablescontiene la cadena que estoy buscando. Esto se verifica por

  1. imprimiendo iptables en la terminal segundos antes y después de una ejecución programada
  2. agregando un echo "this" >>/log/file.loga la cláusula if.

Toma 1:

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

Tomar 2:

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

Probé ambos, activados por (sudo) crontab con la siguiente línea:

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

Lo que me desconcierta es que ambas opciones anteriores parecen funcionar cuando se ingresan directamente en la terminal de esta manera:

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

¿Lo que da?

Si es relevante, mi sistema es un Linux Mint 19.3 Tricia nuevo.

Respuesta1

Entonces responderé esto yo mismo - todos los créditos a@steeldriver'scomentario:
iptablesno está en cron PATH. Se modificó el comando para incluir la ruta completa /sbin/iptables.

información relacionada