Đối với một máy chủ chạy online việc đảm bảo dịch vụ chạy liên tục là điều hiển nhiên. Tuy nhiên nhiều khi không phải lúc nào cũng có thể có mạng hay có thể kết nối vào máy chủ để xử lý. Vì vậy việc tự động khôi phục lại dịch vụ khi bị tắt là rất quan trọng. Tôi xin giới thiệu một đoạn code đơn gian để làm nhiệm vụ trên.
Trước hết là câu lệnh kill process rất hiệu quả, khi process bị lỗi, ví dụ tôi cần kill tất cả các process của mysql
for FOO in `ps ax | grep mysql | grep -v grep | awk '{print $1}'`; do kill -9 $FOO; done
Tiếp theo là đoạn code check service :
#!/bin/bash
# Shell script to restart MySQL,APACHE,TOMCAT server if it is killed or not working
# BY Pham Duc Hai 04/06/2007
COUNT1=$(ps -ef | grep mysql | wc -l)
if [ $COUNT1 -le 1 ]
then
/backup/jobs/mysql.sh >> /backup/jobs/logs/mysql.log
fi
COUNT2=$(ps -ef | grep httpd | wc -l)
if [ $COUNT2 -le 1 ]
then
/opt/apache/bin/apachectl -k restart >> /backup/jobs/logs/mysql.log
fi
COUNT3=$(ps -ef | grep java | wc -l)
if [ $COUNT3 -le 1 ]
then
/usr/bin/kill -9 `pgrep -u java` >> /backup/jobs/logs/tomcat.log
/opt/tomcat/bin/shutdown.sh
/opt/tomcat/bin/start.sh
/opt/apache/bin/apachectl -k restart >> /backup/jobs/logs/apache.log
sleep 2
echo "Done tomcat at `date` " >> /backup/jobs/logs/tomcat.log
fi
Lưu ý các tham số
$COUNT1,$COUNT2,$COUNT3 tùy thuộc vào máy bạn, đây là số process của chương trình cần kiểm tra, nên bạn lấy số process nhỏ nhất của nó để so sánh, ở đây là 1 (đối với của máy của tôi)
$COUNT1 -le 1
Bạn copy đoạn code trên vào 1 file tên là checkservice.sh, chmod cho nó có quyền +x (thực thi)
ví dụ đặt tại vị trí :
/backup/jobs/checkservice.shSau đó đặt lịch vào cron tab:
ví dụ đặt 30 phút kiểm tra dịch vụ 1 lần :
30 * * * *
/backup/jobs/checkservice.sh > /backup/jobs/logcheck.log
Như vậy là bạn cũng tạm yên tâm làm việc khác rồi.
Ngày cách trên còn 1 cách check service theo port của service, tôi sẽ nêu sau. Bạn nào có cách khác thì chia sẻ với tôi nhé