Trong lúc search các thông tin về các dịch vụ monitor, tình cờ thấy bài viết Kiểm tra và thông báo Service bị Stop qua Telegram, cá nhân thấy khá hay, nên vác về để chạy cho thèng bibica.net
Cụ thể thèng bibica.net đang chạy trên Webinoly, sử dụng Nginx, PHP 7.4 và Mariadb
Kiểm tra các phiên bản cụ thể đang chạy bằng lệnh service --status-all
service --status-all [ + ] apparmor [ + ] apport [ - ] console-setup.sh [ + ] cron [ - ] cryptdisks [ - ] cryptdisks-early [ + ] dbus [ - ] grub-common [ - ] hwclock.sh [ + ] irqbalance [ + ] iscsid [ - ] keyboard-setup.sh [ + ] kmod [ - ] lvm2 [ - ] lvm2-lvmpolld [ + ] mariadb [ + ] multipath-tools [ + ] netfilter-persistent [ - ] nfs-common [ + ] nginx [ - ] nginx-debug [ - ] open-iscsi [ - ] open-vm-tools [ + ] php7.4-fpm [ + ] plymouth [ + ] plymouth-log [ + ] procps [ + ] rpcbind [ - ] rsync [ - ] screen-cleanup [ + ] ssh [ + ] udev [ + ] ufw [ + ] unattended-upgrades [ - ] uuidd [ - ] x11-common
1. Monitor Status PHP, Mysql, Nginx
Đầu tiên là tạo 1 con chat bot Telegram, ví dụ
- Bot Token 6360723418:AAF1aya50fEi6sVuOwhXp53Ic19siP3gqLc
- Chat ID 489842537″
Sau đó tạo 1 file bash bên trong /usr/local/bin/, có thể đặt tên là monitor_service.sh
touch /usr/local/bin/monitor_service.sh nano /usr/local/bin/monitor_service.sh
Nội dung bên trong điền vào
#!/bin/bash while true do # Set up Telegram bot API and chat ID BOT_API_KEY="6360723418:AAF1aya50fEi6sVuOwhXp53Ic19siP3gqLc" CHAT_ID="489842537" # Check if MySQL service is running if ! systemctl is-active --quiet mysql.service; then # If not running, send message to Telegram MESSAGE="MySQL service is down!" curl -s -X POST https://api.telegram.org/bot$BOT_API_KEY/sendMessage -d chat_id=$CHAT_ID -d text="$MESSAGE" fi # Check if Nginx web server is running (Thay bằng dịch vụ webserver trên VPS của bạn) if ! systemctl is-active --quiet nginx.service; then # If not running, send message to Telegram MESSAGE="Nginx web server is down!" curl -s -X POST https://api.telegram.org/bot$BOT_API_KEY/sendMessage -d chat_id=$CHAT_ID -d text="$MESSAGE" fi # Check if PHP service is running (Thay bằng dịch vụ PHP trên VPS của bạn) if ! systemctl is-active --quiet php7.4-fpm.service; then # If not running, send message to Telegram MESSAGE="PHP service is down!" curl -s -X POST https://api.telegram.org/bot$BOT_API_KEY/sendMessage -d chat_id=$CHAT_ID -d text="$MESSAGE" fi sleep 1 done
Sửa dòng 6, 7, 10, 17, 24 cho phù hợp với bot Telegram và dịch vụ bạn đang sử dụng
Sửa xong thì Ctrl+O -> Enter -> Ctrl+X để save và exit.
Ý nghĩa của đoạn code trên là nó cứ check tình trạng của PHP, Mysql, Nginx,
- Nếu PHP, Mysql, Nginx chạy thì thôi, không làm gì
- Nếu PHP, Mysql, Nginx không chạy thì gửi thông báo tới Telegram
- Chạy xong xuôi thì ngừng 1s, sau đó chạy lại từ đầu 😀
Tiếp theo chạy các dòng code bên dưới để nó tự chạy ngầm và tự chạy lại sau khi reboot VPS
chmod +x /usr/local/bin/monitor_service.sh nohup /usr/local/bin/monitor_service.sh >> ./out 2>&1 <&- & crontab -l > monitor_service echo "@reboot nohup /usr/local/bin/monitor_service.sh >> ./out 2>&1 <&- &" >> monitor_service crontab monitor_service
2. Monitor and restart PHP, Mysql, Nginx
Về mặt ý tưởng, bạn cũng có thể làm thêm 1 chút, để khi check PHP, Mysql, Nginx, nếu thấy dịch vụ nào ngừng chạy, nó tự khởi động lại, sau đó thông báo tới Telegram cho bạn biết
#!/bin/bash while true do # Set up Telegram bot API and chat ID BOT_API_KEY="6360723418:AAF1aya50fEi6sVuOwhXp53IV19siP3gqLc" CHAT_ID="489842337" # Check if MySQL service is running if ! systemctl is-active --quiet mysql.service; then # If not running, restart and send message to Telegram sudo service mysql restart MESSAGE="MySQL Service was down. Restarting now" curl -s -X POST https://api.telegram.org/bot$BOT_API_KEY/sendMessage -d chat_id=$CHAT_ID -d text="$MESSAGE" fi # Check if Nginx web server is running (Thay bằng dịch vụ webserver trên VPS của bạn) if ! systemctl is-active --quiet nginx.service; then # If not running, restart and send message to Telegram sudo service nginx restart MESSAGE="Nginx Service was down. Restarting now" curl -s -X POST https://api.telegram.org/bot$BOT_API_KEY/sendMessage -d chat_id=$CHAT_ID -d text="$MESSAGE" fi # Check if PHP service is running (Thay bằng dịch vụ PHP trên VPS của bạn) if ! systemctl is-active --quiet php7.4-fpm.service; then # If not running, restart and send message to Telegram sudo service php7.4-fpm restart MESSAGE="PHP Service was down. Restarting now" curl -s -X POST https://api.telegram.org/bot$BOT_API_KEY/sendMessage -d chat_id=$CHAT_ID -d text="$MESSAGE" fi sleep 1 done
Mình chỉ thêm phần service restart, với sửa lại nội dung thông báo, còn lại cơ bản tương tự code 1 cả 😛
Tiếp theo chạy các dòng code bên dưới để nó tự chạy ngầm và tự chạy lại sau khi reboot VPS
chmod +x /usr/local/bin/monitor_service_restart.sh nohup /usr/local/bin/monitor_service_restart.sh >> ./out 2>&1 <&- & crontab -l > monitor_service_restart echo "@reboot nohup /usr/local/bin/monitor_service_restart.sh >> ./out 2>&1 <&- &" >> monitor_service_restart crontab monitor_service_restart
2 đoạn code trên mình cho chạy ngầm qua nohup, gần như nó chạy liên tục, không bị giới hạn như dùng cron, 1 phút chạy 1 lần, nên thông báo gần như là tức thời, hiệu quả hơn
Làm xong xuôi nếu thích bạn cũng có thể tạo thành file bash auto toàn bộ các quá trình vào 1 dòng code cho nhanh, sau này có cài lại VPS thì chỉ chạy 1 dòng code là đủ
Kết luận
Trước đây mình rất thích phong cách của code thứ 2, dịch vụ chạy lỗi, tự restart lại dịch vụ, quản trị nhàn bỏ xừ 😀
Có điều trên Linux, các dịch vụ chạy cực kì ổn định, thường nếu không có gì đặc biệt, chạy vài năm không phải khởi động lại dịch vụ nào là bình thường
Nó phải lỗi nghiêm trọng lắm, thì mới sập nổi, mà sập thì cần tìm hiểu nguyên nhân để xử lý, chứ cứ lỗi rồi khởi động lại dịch vụ thì quản trị khá là ngu học
Mỗi cái mình cũng mù tịt kiến thức về server 😀 Mysql quá tải sập, thường mình cũng …. chịu, không biết cách nào để xứ lý thêm, ngoài chuyện restart lại dịch vụ 😀 thành ra mình đang sử dụng code thứ 2, để tự khởi động lại dịch vụ 😛 phần vì nó cũng có hỗ trợ gửi thêm tin nhắn, ít ra mình cũng biết là server vừa có lỗi để có thể vào xem 😛
Nếu cài server cho nhiều khách hàng, hoặc server cá nhân ít vào, thì mình thấy quản trị cơ bản nhất là cứ cài cái code 2 vào là đủ, cũng hiếm cần quan tâm thêm cái gì 😀
Chính sách bình luận: Chúng tôi rất trân trọng các bình luận của bạn và cảm ơn thời gian bạn dành để chia sẻ ý tưởng và phản hồi.
Ghi chú: Những bình luận được xác định là spam hoặc chỉ mang tính quảng cáo sẽ bị xóa.
• Để cải thiện trải nghiệm bình luận, chúng tôi khuyến khích bạn tạo một tài khoản Gravatar. Thêm avatar vào tài khoản Gravatar sẽ giúp bình luận của bạn dễ nhận diện hơn đối với các thành viên khác.
• ✂️ Sao chép và 📋 Dán Emoji 💪 giúp bình luận thêm sinh động và thú vị!