pptp (pon) falha quando chamado via cron (debian)

7

Eu tenho um pptp VPN link de discagem do meu servidor linux (debian) aqui, para um servidor ISA2003 em um site remoto.

A conexão à internet em (ambas) extremidades é um pouco desonesta, então escrevi um pequeno script para chamar pon myvpnlink se ele detectar que o link caiu.

Este script funciona bem se eu o executar a partir da CLI, mas se ele for chamado via cron, a chamada pon parece falhar.

Eu reescrevi isso tanto no bash quanto no perl e tenho o mesmo problema com cada um. O script é executado, ele pode dizer se o link da VPN está ativo ou inativo, chama pon , que chama o pppd, que não consegue se conectar. Se eu for executar o script do CLI, tudo bem.

Qualquer pensamento seria muito apreciado - isso está fazendo minha caixa agora.

#Syslog (on a failure):
Dec 30 17:02:01 LogServer /USR/SBIN/CRON[4530]: (root) CMD (/bin/bash /root/scripts/vpnup.bash >> /root/scripts/vpn.log)
Dec 30 17:02:01 LogServer pppd[4542]: pppd 2.4.4 started by root, uid 0
Dec 30 17:02:01 LogServer pppd[4542]: Couldn't get channel number: Input/output error
Dec 30 17:02:01 LogServer pppd[4542]: Exit.

#Cron Line
* * * * * root /bin/bash /root/scripts/vpnup.bash >> /root/scripts/vpn.log

Atualização:

Funciona bem agora. Eu estava chamando minha entrada do cron via /etc/cron.d/vpn que originalmente se parecia com:

MAILTO=root
* * * * * root /bin/bash /root/scripts/vpnup.pl >> /root/scripts/vpn.log

Agora que foi alterado, o pptp funciona perfeitamente :-D

MAILTO=root
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
* * * * * root perl /root/scripts/vpnup.pl >> /root/scripts/vpn.log

muito obrigado a Justin por dar exemplos:)

    
por BuildTheRobots 30.12.2009 / 18:06

2 respostas

5

A mensagem de erro que você postou aponta para um bug no pppd, no entanto a situação que você descreveu "funciona do shell, mas não do cron" é geralmente relacionada a problemas de caminho.

já que não pode doer, você pode tentar adicionar isto ao topo do seu crontab?

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

edit: uma solução alternativa que você poderia usar, é se ela sempre funciona a partir do shell, tem outro script curto que faz um

while true;do vpnup.sh;sleep 1m;done >> log

então você pode começar isso na tela com algo como

screen -S vpn -d -m thatscript
    
por 02.01.2010 / 23:25
2

Obrigado, isso funcionou para mim! Minha configuração agora é assim ...

#!/bin/bash
result='ifconfig | grep ppp0 | wc -l'
if [[ $result  != "1" ]]; then
pon hma
sleep 10
route add -net 0.0.0.0 ppp0 #Routes all traffic on the server through VPN (useful)
fi

E meu cron ...

# m h  dom mon dow   command
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
* * * * * /home/foo/restart_vpn.sh
    
por 11.07.2012 / 08:12