Cronjob não será executado corretamente

0

Eu tenho este script sh:

ufw allow 27017 && iptables -F

em um arquivo test.sh

E eu quero rodar isso com um cronjob com root todos os dias às 07:00 assim:

0 7 * * * /root/cron/test.sh

E eu também verifiquei se este script realmente rodou com o greon CRON / var / log / syslog e eu posso ver que de fato ele rodou:

Aug 24 07:00:01 vps118774 CRON[1672]: (root) CMD (/root/cron/test.sh)

Agora, meu problema é que o script real do test.sh não foi executado corretamente para desbloquear minha porta com esse cronjob, o ponto é que se eu executar esse script manualmente a partir do terminal no servidor com:

sh script.sh

Tudo funciona bem, e o script tomará a ação desejada, então o script é executado como esperado, mas o que há de errado com o meu cron executando isso?

Eu coloquei os logs da execução tenho estes:

root/cron/test.sh: 2: /root/cron/test.sh: ufw: not found

    
por Tatu Bogdan 24.08.2018 / 10:45

1 resposta

7

As tarefas Cron são executadas em um ambiente shell que pode ser diferente do que o seu ambiente shell interativo comum. Por exemplo, a variável PATH pode ter uma lista de diretórios diferentes e pode não ter alguns diretórios dos quais você está acostumado a executar utilitários.

Descobrir onde o utilitário ufw está localizado (usando command -v ufw na linha de comando) e, em seguida,

  1. use o caminho completo para esse utilitário no script ou
  2. modifique a variável PATH dentro do script para incluir o diretório no qual o ufw utility (e iptables ) pode ser encontrado.

O script, como mostrado na pergunta, não possui uma #! -line adequada. Isso não é um problema se você executar com sh explicitamente, mas você não faz isso na especificação da tarefa cron. Em vez disso, torne o script executável e, em seguida, escreva-o como

#!/bin/sh

PATH="$PATH:/usr/sbin:/sbin"

ufw allow 27017 && iptables -F

Em seguida, chame o script do seu crontab exatamente como você está fazendo atualmente.

Aqui, também adicionei os dois diretórios /usr/sbin e /sbin à variável PATH , apenas para mostrar como alguém pode fazer isso no script.

    
por 24.08.2018 / 11:06