Professional Documents
Culture Documents
dịch vụ, dịch vụ bị tắt (services stop), và bạn cũng biết hệ thống thì đòi hỏi cách dịch vụ phải luôn luôn
online. Thông thường lỗi này máy chủ thiếu tài nguyên (resources) nên các kill các process.
Thường mình hay gặp nhất ở các VPS khách hàng với lỗi OOM (Out of memory), thiếu tài nguyên RAM.
Mình dùng lệnh dmesg để check sơ bộ. Nếu các dịch vụ khác bị stop bạn có thể vào /var/log để kiểm tra
thêm.
[root@sv.local.linuxcanban.com~]# dmesg
ps và netstat để kiểm tra. Các lệnh này đi kèm các option và bạn cần thêm vào option để có hiệu lực khi
nhập.
● Ví dụ: Mình dùng 2 lệnh ps và netstat để kiểm tra trạng thái mysqld.
[root@sv ~]# netstat -tulpn | awk '{ print $7 }' | grep mysqld | wc -l
[root@sv ~]#
● 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
. Nhưng nếu dịch vụ quản lý trong /etc/init.d bạn có thể dùng /etc/init.d/mysql start để start
dịch vụ.
quản lý dịch vụ truyền thống dành cho Linux, chứa initchương trình (quy trình đầu tiên được chạy khi
kernel đã khởi tạo xong) cũng như một số cơ sở hạ tầng để khởi động và dừng dịch vụ và định cấu hình
chúng. Cụ thể, tập tin trong /etc/init.dnhững kịch bản shell mà đáp ứng start, stop, restart, và (khi
được hỗ trợ) reloadlệnh để quản lý một dịch vụ cụ thể. Các tập lệnh này có thể được gọi trực tiếp hoặc
(phổ biến nhất) thông qua một số trình kích hoạt khác (thường là sự hiện diện của một liên kết tượng trưng
trong /etc/rc?.d/).
vi /bin/auto-start-services.sh
● Lưu ý: Bên dưới là mình thực hiện start mysqld, nếu bạn cần start các dịch vụ khác như httpd,
#!/bin/bash
service=mysqld ## gán service= tên dịch vụ là mysqld
if (( $(ps -ef | awk '{ print $8 }' | grep mysqld | wc -l) > 0 )) ## Nếu kiểm tra kết quả trả về 1 thì bỏ qua, trả về 0
sẽ start lại dịch vụ
then
echo "$service ready running"
else
/etc/init.d/$service start
fi
Sau khi dán vào bạn thực hiện chmod lại file
chmod +x /bin/auto-start-services.sh
một lần. Bạn chạy lệnh crontab -e sau đó dán vào nội dung như sau.
*/5 * * * * sh /bin/auto-start-services.sh
Như vây là cứ mỗi 5 phút sẽ chạy một lần, dịch vụ stop sẽ tự động start lên lại.
1. #!/bin/bash
2. SERVICE=<service>
3. if P=$(pgrep $SERVICE)
4. then
5. echo "$SERVICE is running, PID is $P"
6. else
7. echo "$SERVICE is not running, starting..."
8. # start service if not running
9. systemctl start $SERVICE
10. fi
Với <service> là tên service cần kiểm tra, ví dụ: mysqld, nginx,…