web-dev-qa-db-ja.com

cron(debian)経由で呼び出されると、pptp(pon)が失敗する

ここにある(Debian)LinuxサーバーからリモートサイトのISA2003サーバーにダイヤルするpptpVPNリンクがあります。

(両端の)インターネット接続はやや危険なので、リンクがダウンしたことを検出した場合にpon myvpnlinkを呼び出す小さなスクリプトを作成しました。

このスクリプトは、CLIから実行すると正常に機能しますが、cron経由で呼び出された場合、pon呼び出しは失敗するようです。

私はこれをbashとPerlの両方で書き直しましたが、それぞれに同じ問題があります。スクリプトが実行され、VPNリンクが現在アップしているかダウンしているかを知ることができ、接続に失敗したpppdを呼び出すponを呼び出します。その後、CLIからスクリプトを実行すると、問題ありません。

どんな考えでも大歓迎です-これは今私の箱をやっています。

#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

更新:

現在は正常に動作しています。 /etc/cron.d/vpnを介してcronエントリを呼び出していましたが、元々は次のようになりました。

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

変更されたので、pptpは完全に機能します:-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

例を挙げてくれたジャスティンに感謝します:)

7
BuildTheRobots

あなたが投稿したエラーメッセージは、pppdのバグを示していますが、「シェルからは機能しますが、cronからは機能しません」と説明した状況は、パスの問題に関連しています通常

傷つけることはできないので、これをcrontabの先頭に追加してみてください。

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

編集:使用できる回避策の1つは、常にシェルから機能する場合は、

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

次に、次のような画面でそれを開始できます

screen -S vpn -d -m thatscript
5
Justin

これが私のために働いてくれてありがとう!私の設定は次のようになります...

#!/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

そして私の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
2
Chris