Câu hỏi PPTP sẽ không kết nối từ lệnh cron


Tôi đang cố gắng tìm ra lý do tại sao VPN của tôi sẽ không kết nối khi lệnh được khởi tạo từ một kịch bản cron được kích hoạt khi cùng một tập lệnh và lệnh khác hoạt động như mong đợi.

Tôi có một máy chủ từ xa sử dụng đường hầm VPN an toàn (pptp) để kết nối với cơ sở dữ liệu phía sau tường lửa của chúng tôi. Đó là một hệ thống khá ổn định (đặc biệt là với persistent tùy chọn thiết lập), và thường chạy mà không có bất kỳ vấn đề. Tuy nhiên, theo thời gian, kết nối từ ISP của chúng tôi đến văn phòng của chúng tôi sẽ ngừng hoạt động và việc ngắt kết nối này đủ dài để ngăn chặn đường hầm VPN luôn mở.

Tôi đã thiết lập một kịch bản đơn giản để phát hiện nếu cơ sở dữ liệu tường lửa vẫn có sẵn trên VPN và, nếu không, nó sẽ cố gắng mở lại 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

Tôi đã lưu tập lệnh dưới dạng /root/cron/pptp-monitor và đặt quyền như -rwxr--r-- root root

Kịch bản hoạt động tốt khi chạy thủ công (sử dụng sudo) - nhưng cron tôi đã cấu hình không hoạt động đúng:

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

Kịch bản màn hình chạy - Tôi thấy các mục nhật ký mỗi 5 phút - nhưng pon lệnh không thực sự có vẻ cháy.

Trong syslog, tôi thấy điều này sau mỗi 5 phút:

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.

Các dòng "sử dụng giao diện ppp0" đến "kết nối chấm dứt" được lặp lại 10 lần trước exit - chỉ ra rằng đường hầm đang cố gắng mở lại không thành công. Lưu ý - kết nối mạng là tốt bởi thời gian này, và ngay sau khi tôi chạy lệnh bằng tay, nó kết nối vào lần thử đầu tiên.

Tôi đã bỏ lỡ điều gì gây ra kích hoạt cron để ngăn chặn kết nối VPN?


2
2018-04-16 23:40


gốc


bạn đã tìm ra được giải pháp nào chưa ? - MKT
@MKT chưa có - HorusKol


Các câu trả lời:


Bạn cần khai báo PATH biến trong các tập lệnh của bạn, sau đó nó sẽ hoạt động. Ở đầu tệp (cả hai crontab và tập lệnh sẽ được thực thi):

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

2
2018-01-26 12:09



Tại sao không #!/bin/sh? - Donarsson


Tôi muốn chạy điều này:

# 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

Hơn chạy này:

# 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

Bởi vì pppd sẽ chạy pptp, nhưng pptp được đặt trong `/ usr / sbin / ', do đó, thiết lập $ PATH có thể là cần thiết.


0
2018-02-02 05:01



Xin lỗi nhưng điều này đơn giản là sai. Không có lý do gì để sử dụng /etc/crontab. Khi chạy contab -e, bạn là chỉnh sửa một tập tin trực tiếp, nó chỉ là crontab cá nhân của người dùng của bạn, do đó tên người dùng được giả định. Nếu bạn muốn làm điều này cho người dùng khác, hãy chạy sudo -u username crontab -e. Như cho $PATH, hoàn toàn không có sự khác biệt giữa việc sử dụng toàn bộ hệ thống /etc/crontab tệp hoặc địa phương. - terdon♦