web-dev-qa-db-ja.com

PPTP cronコマンドから接続しません

同じスクリプトとコマンドが期待どおりに機能する場合、cronトリガースクリプトからコマンドが開始されたときにVPNが接続しない理由を解決しようとしています。

安全なVPNトンネル(pptp)を使用してファイアウォールの背後にあるデータベースに接続するリモートサーバーがあります。これは非常に安定したシステムで(特にpersistentオプションが設定されている)、通常は問題なく実行されます。ただし、ISPからオフィスへの接続は時々ドロップアウトし、この切断はVPNトンネルが開いたままになるのを防ぐのに十分な長さです。

ファイアウォールで保護されたデータベースがVPNを介してまだ使用可能かどうかを検出する簡単なスクリプトをセットアップし、使用可能でない場合は、VPNを再オープンしようとします。

#!/bin/bash

DATE=`date`

Host=10.1.2.1

PING_RESULT=`ping -c4 $Host`
# gets the percentage of lost packets
PING_LOSS=`echo $PING_RESULT : | grep -oP '\d+(?=% packet loss)'`

echo "$DATE : Loss Result : $PING_LOSS"

# if 100% packet loss on the ping - assume connection lost
if [ "100" -eq "$PING_LOSS" ];
then
        echo "$DATE : Connection Lost"
        pon VPN_TUNNEL
        echo "$DATE : Restarted Connection"
else
        echo "$DATE : Connection OK"
fi

スクリプトを/root/cron/pptp-monitorとして保存し、許可を-rwxr--r-- root rootとして設定しました

スクリプトは(Sudoを使用して)手動で実行するとうまく機能しますが、構成したcronは正しく機能しません。

*/5 *     * * *     root   [ -x /root/cron/pptp-monitor ] && /root/cron/pptp-monitor >> /var/log/pptp-monitor.log 2>&1

監視スクリプトが実行されます-5分ごとにログエントリが表示されます-しかし、ponコマンドは実際には起動しないようです。

Syslogでは、これは5分ごとに表示されます。

Apr 17 08:45:01 bombur CRON[774]: (root) CMD (  [ -x /root/cron/pptp-monitor ] && /root/cron/pptp-monitor >> /var/log/pptp-monitor.log 2>&1)
Apr 17 08:45:14 bombur pppd[784]: pppd 2.4.5 started by root, uid 0
Apr 17 08:45:14 bombur pppd[784]: Using interface ppp0
Apr 17 08:45:14 bombur pppd[784]: Connect: ppp0 <--> /dev/pts/0
Apr 17 08:45:14 bombur pppd[784]: Modem hangup
Apr 17 08:45:14 bombur pppd[784]: Connection terminated.

「interface ppp0を使用」から「接続終了」までの行は、exitの前に10回繰り返されます。これは、トンネルが再オープンに失敗したことを示します。注-この時点までにネットワーク接続は正常であり、コマンドを手動で実行するとすぐに、最初の試行で接続されます。

CronトリガーがVPN接続を妨げている原因は何ですか?

2
HorusKol

スクリプトでPATH変数を宣言する必要があります。その後、変数は機能します。ファイルの先頭(crontabと実行されるスクリプトの両方):

Shell=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
2
Matei

私はこれを実行したい:

# Here we can specify which user do crontab use.
# And, we can change $PATH by edit this file directly

vi /etc/crontab

# I'm using centos, restart cron daemon

service crond restart

これを実行するより:

# Edit crontab directly, we can't specify the user.
# And I'm not sure changing $PATH is available or not.
# The default value of $PATH may be `/sbin:/bin:/usr/sbin:/usr/bin'

crontab -e

Pppdはpptpを実行しますが、pptpは `/ usr/sbin/'にあるため、$ PATHの設定が必要になる場合があります。

0
0xAA55