同じスクリプトとコマンドが期待どおりに機能する場合、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接続を妨げている原因は何ですか?
スクリプトでPATH
変数を宣言する必要があります。その後、変数は機能します。ファイルの先頭(crontab
と実行されるスクリプトの両方):
Shell=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
私はこれを実行したい:
# 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の設定が必要になる場合があります。