
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 if
cláusula mesmo que iptables
contenha a string que estou procurando. Isto é verificado por
- imprimindo iptables no terminal segundos antes e depois de uma execução agendada
- 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:
iptables
não está no cron PATH
. Comando alterado para incluir o caminho completo /sbin/iptables
.