cron - Bash-Skript mit if-Anweisungen für Exitcode und grep

cron - Bash-Skript mit if-Anweisungen für Exitcode und grep

Ich bin ein relativer „Anfänger“ in der Welt von Linux und Bash und komme damit nicht klar.

Unter anderem möchte ich iptables ändern, wenn „String“ dort nicht vorhanden ist, aber das scheint nicht zu funktionieren. Ich bin nicht sicher, ob dies an den if-Anweisungen, dem Exit-Code, der Syntax oder den Sudo-Berechtigungen oder anderen Dingen liegt.

Wenn das Skript automatisch über Cron ausgeführt wird, führt es die ifKlausel aus, auch wenn iptableses die gesuchte Zeichenfolge enthält. Dies wird überprüft durch

  1. Drucken von iptables im Terminal sowohl Sekunden vor als auch nach einem geplanten Lauf
  2. echo "this" >>/log/file.logindem Sie der if-Klausel ein hinzufügen .

Nimm 1:

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

Nimm 2:

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

Ich habe beides versucht, ausgelöst durch (sudo) crontab mit der folgenden Zeile:

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

Was mich verblüfft, ist, dass beide oben genannten Optionen zu funktionieren scheinen, wenn sie wie folgt direkt in das Terminal eingegeben werden:

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

Was gibt?

Falls relevant, mein System ist ein frisches Linux Mint 19.3 Tricia

Antwort1

Ich werde das dann selbst beantworten - alle Credits an@Stahlfahrer'SKommentar:
iptablesist nicht in Crons PATH. Befehl geändert, um vollständigen Pfad einzuschließen /sbin/iptables.

verwandte Informationen