Nem todos os scripts de shell funcionam com o crontab

2

Eu sei que este é um título bastante amplo, mas eu não sabia com o que começar.

De qualquer forma, direto ao ponto. Eu tenho um pequeno VPS eu corro apache e um servidor Minecraft. Eu nunca o desativo, mas devo reiniciá-lo por algum motivo, IPTables bloqueia a maioria das minhas portas, incluindo a porta 80. Eu tentei tantas sugestões diferentes para consertar isso, mas sem sorte. Além disso, uma vez que o provedor é OVH, o suporte é ... falta.

Então, criei uma solução alternativa com a qual estou feliz. Eu criei um arquivo de script de shell simples para abrir certas portas que eu preciso abrir na reinicialização (80 e 25565 por enquanto). Os mais importantes, como 21 e 22, não são afetados no reinício.

O script é assim:

iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p udp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 25565 -j ACCEPT
iptables -I INPUT -p udp --dport 25565 -j ACCEPT
/sbin/service iptables save

Quando eu o executo manualmente digitando /iptdef.sh , ele roda bem, as portas se abrem e tudo fica bem.

Claro, não é prático ter que lembrar de executá-lo toda vez que eu reiniciar o servidor, então adicionei um crontab. O problema é que não funciona / corre. Este é o meu arquivo crontab:

*/5 * * * * /backup2.sh
*/55 * * * * /backup3.sh
@reboot /iptdef.sh
* * * * *  /iptdef.sh

As primeiras duas linhas funcionam. Eles são apenas scripts simples que fazem um backup de uma pasta para mim. As duas segundas linhas são o que não está funcionando.

Existe uma chance de que talvez não seja possível executar comandos do iptables a partir de um cron? Parece bobo, mas não vejo outra razão para não funcionar. Os scripts têm as permissões corretas.

    
por Byonex 21.07.2015 / 03:26

3 respostas

6

É porque o cron forçosamente define PATH para /usr/bin:/bin . Você precisa invocar iptables as /sbin/iptables ou adicionar PATH=/usr/sbin:/sbin:/usr/bin:/bin no seu script ou crontab. Veja crontab (5) para detalhes.

    
por 21.07.2015 / 04:15
0

Isso parece estar bem aqui: o @reboot do crontab só funciona para root? basicamente a resposta depende muito do que você usa para o Cron e sua distribuição Linux.

    
por 21.07.2015 / 03:59
0

Eu tive que adicionar isso a /etc/hosts para que as mensagens para qualquer pessoa no FQDN do meu servidor fossem resolvidas:

127.0.0.1 mydomain.com.

Observe o ponto no final. No meu caso, estou enviando e-mail essencialmente para root @ localhost com MAILTO=root , que é traduzido para [email protected].

Veja mais detalhe nesta resposta.

    
por 16.08.2017 / 20:08

Tags