Câu hỏi Tôi có thể tự động khởi động lại nếu bị ngắt kết nối khỏi Internet không?


Tôi có một máy tính để bàn cũ mà tôi đang chạy như một máy chủ web từ nhà của tôi trong khi tôi đang ở trường đại học. Internet ở nhà là crappy và rất nhiều lần khi nó đi xuống, máy tính để bàn không thể kết nối lại mà không cần khởi động lại.

Có cách nào để tạo một kịch bản tải khi khởi động và cứ 12 giờ một lần, sẽ cố gắng ping bộ định tuyến và nếu nó không thành công, hãy khởi động lại máy chủ?

CHỈNH SỬA: Ok, tôi đã có thể thực hiện kịch bản này sau khi googling xung quanh một chút.

#!/bin/bash

ping -c 1 192.168.1.1 > /dev/null
if [ $? -ne 0 ]; then
  reboot
fi

Điều đó kiểm tra nếu ping thành công, và nếu nó không phải là nó khởi động lại.
Bây giờ tôi cần làm gì để thực hiện điều này trên một lịch trình đã định?


5
2018-01-14 17:07


gốc


Nếu bạn phải khởi động lại máy chủ, chứ không phải bộ định tuyến - vấn đề không phải với kết nối Internet mà bạn thích quá nhiều. Bạn có các vấn đề khác cần được giải quyết trên máy tính để bàn / máy chủ của bạn - và kịch bản bổ sung có khả năng sẽ không giúp ích gì. - ziesemer
Ya tôi biết có những vấn đề khác cần được giải quyết, nhưng tôi sẽ rời khỏi trong vòng 24 giờ và tôi cần một sửa chữa nhanh chóng sẽ hoạt động cho đến khi tôi trở về nhà. Tôi biết nó không phải là một giải pháp hoàn hảo, nhưng ít nhất cho đến nay khởi động lại nó đã được làm việc. Và dù sao, máy chủ là khá nhiều chỉ được sử dụng để sử dụng thử nghiệm cá nhân do đó, một sửa chữa nhỏ crappy như thế này là tốt cho bây giờ.
Bạn đang sử dụng hệ điều hành nào? - ziesemer
Máy chủ Ubuntu 11.10


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


Bạn đã không đề cập đến hệ điều hành, nhưng nếu bạn đang sử dụng Windows, một cái gì đó như thế này có thể hữu ích: JScript cho Ping, Gia hạn IP và Thông tin mạng / Sửa chữa.

Đây là một kịch bản tôi đặt cùng nhau cho một vấn đề tương tự. Nó thực hiện khá chính xác những gì bạn đang tìm kiếm, trong đó nó ping cổng mặc định (sẽ là router của bạn) trên một lịch trình nhất định, và sau đó thực hiện hành động cần thiết nếu ping không thành công.

Trong trường hợp này, vấn đề máy tính không cần phải khởi động lại, nhưng chỉ đơn giản là có một ipconfig /release và ipconfig /renew theo kịch bản để lấy lại kết nối. Một cái gì đó như thế này có thể làm việc tốt cho trường hợp của bạn là tốt. Nếu vẫn cần khởi động lại đầy đủ, tập lệnh này cũng có thể được sửa đổi dễ dàng để tính đến điều đó.

Đối với Linux, bạn có thể sử dụng tập lệnh shell như sau:

#!/bin/sh

ping -c5 192.168.1.1

if [ $? -eq 0 ]; then
    echo "ok"
else
    reboot
fi

Điều này hoạt động vì mã trả về của ping, như được nêu chi tiết trong trang người đàn ông:

Nếu ping không nhận được bất kỳ gói trả lời nào, nó sẽ thoát với   Mã 1. Nếu số lượng gói và hạn chót được chỉ định và ít hơn   hơn số lượng gói tin được nhận bởi thời hạn đã đến,   nó cũng sẽ thoát với mã 1. Trên lỗi khác, nó thoát với mã 2.   Nếu không, nó thoát với mã 0. Điều này làm cho nó có thể sử dụng lối ra   mã để xem liệu một máy chủ có còn sống hay không.

Sau khi thay thế 192.168.1.1 với địa chỉ của bộ định tuyến, bạn có thể lên lịch để chạy mỗi giờ hoặc lâu hơn bằng cron. Để khởi động lại, bạn sẽ cần phải chạy như root. Đối với Ubuntu mặc định, bạn có thể thêm một công việc cron bằng cách sử dụng:

sudo crontab -e

Để kiểm tra này chạy mỗi giờ, ví dụ:

00 * * * * /path/to/script/pingRouterCheckReboot.sh

Bạn sẽ cần đảm bảo rằng tập lệnh có thể thực thi được (chmod +x).

Nếu bạn thấy rằng đưa giao diện xuống và sao lưu là đủ, bạn có thể làm điều này thay vào đó, làm một cái gì đó như ifdown eth0; ifup eth0. Hoặc, kết hợp các cách tiếp cận: Đầu tiên làm điều này, và sau đó thực hiện kiểm tra ping lần nữa. Nếu kết nối vẫn không được khôi phục, sau đó buộc đo lường mạnh mẽ của khởi động lại đầy đủ.


5
2018-01-14 17:32



Xin lỗi, tôi đang chạy máy chủ ubuntu. Mặc dù ya, tôi có thể làm một bản phát hành tương tự và gia hạn nếu nó xuống.
@ user1056869 - Vui lòng xem các cập nhật của tôi trong câu trả lời cho một giải pháp Linux / Ubuntu. - ziesemer
Oh cảm ơn, điều đó nên hoàn hảo. Tôi sẽ thử điều đó.