Làm gì khi service của VPS stop không rõ nguyên nhân và cách phòng tránh

Làm gì khi service của VPS stop không rõ nguyên nhân và cách phòng tránh

Để fix lỗi này bạn cần kiểm tra khá nhiều nhưng đầu tiên bạn cần KIỂM TRA STATUS SERVICE:

1. CÁCH KIỂM TRA STATUS SERVICE

  • Có nhiều lệnh để kiểm tra trạng thái của dịch vụ xem có đang chạy hay không, bạn có thể dùng netstat hoặc ps nhưng phải kết hợp với các options để xuất được ra kết quả như ý.
  • Với mysql khi chạy trên máy chủ sẽ có 2 dấu hiệu để nhận diện nó, ví dụ mysql chạy với port 3306, có process name là mysql hay mysqld. Như vậy chúng ta chỉ cần chạy netstat và ps để xem có các dấu hiệu nhận biết đó không là được, nếu có thì service đang start còn không thì service đang stop.
  • Đây là 2 câu lệnh bạn cần:

ps -ef | awk ‘{ print $8 }’ | grep mysqld | wc -l
netstat -tulpn | awk ‘{ print $7 }’ | grep mysqld | wc -l

Các bạn mới làm việc với linux có thể sẽ dị ứng với chuỗi lệnh bên trên, cảm thấy rất khó hiểu.
Mình hướng dẫn các bạn một cách đơn giản để hiểu ý nghĩa của chuỗi lệnh, bạn sử dụng SSH gõ từng đoạn lệnh nhỏ xem kết quả xuất ra màn hình như nào rồi thêm các đoạn khác vào. Như ví dụ trên mình sẽ nhập lệnh:

ps -ef: nó sẽ xuất ra màn hình tất cả các process đang chạy cùng thông tin của process đó.
| awk ‘{ print $8 }’ : lấy ra cột thứ 8 trong kết quả lênh ps -ef
| grep mysqld: lấy ra những dòng có chữ mysqld
| wc -l: đếm số dòng có chữ mysqld

Như vậy sau khi chạy một trong hai lệnh trên chúng ta xẽ nhận được một số duy nhất 1 đồng nghĩa với mysql đang start nếu là 0 thì mysql stop.

2. LỆNH START SERVICE

Linux cũng có nhiều cách để start dịch vụ, trên CentOS 5/6/7 Ubuntu 10/12/14/15/16 chúng ta có những câu lệnh sau:

/etc/init.d/mysql start
service mysql start
systemctl mysql start

Với máy chủ Apache2 hay nginx nếu bị lỗi bạn cũng dùng một trong 3 lệnh trên để thực hiện start/stop/restart service được nhé.

3. VIẾT SHELL SCRIPT

  • Đã có đủ các thông tin cần thiết phần này chúng ta sẽ bắt tay vào viết script đầu tiên, với logic:
    Nếu kiểm tra service trả về kết quả lớn hơn 0 thì hiển thị dòng thông báo Running Service, ngược lại sẽ thực hiện lệnh start service.
  • Ngắn gọn vậy thôi, bạn dùng trình soạn vi/vim hoặc nano tạo file auto_start_mysql.sh vi /var/www/script/auto_start_mysql.sh
  • Với nội dung sau:

#!/bin/bash
service=mysqld
if (( $(ps -ef | awk ‘{ print $8 }’ | grep mysqld | wc -l) > 0 ))
then
echo “$service chay ngon lanh”
else
/etc/init.d/$service start
fi

Trong script này chỉ có duy nhất một lệnh điều kiện if…else đơn giản, muôn hiểu cách viết lệnh, dấu chấm, dấu phảy, space, ngoặc đơn, ngoặc kép bạn phải tự mình đọc tài liệu cơ bản shell script trên google, mình không chi tiết hết được.
mỗi OS sẽ có tên khác nhau lúc là mysql lúc lại mysqld bạn thay thế cho phù hợp với hệ thống của mình.

4. TỰ ĐỘNG CHẠY SHELL SCRIPT VỚI CRONTAB

Giờ đến bước tự động hóa công việc, bạn cần phân quyền thực thi script cho người dùng.

chmod +x /var/www/script/auto_start_mysql.sh

Chạy lệnh crontab -e tạo crontab với nội dung bên dưới.

*/5 * * * * sh /var/www/script/auto_start_mysql.sh

Tùy mức độ quan trọng của service và tần suất xảy ra lỗi, bạn đặt thời gian chạy crontab phù hợp như bên trên mình để cứ 5 phút chạy script một lần. Done.

Chúc các bạn thành công.

Be the first to comment

Leave a Reply

Your email address will not be published.


*