Dừng Thất Bại

Hiện Tượng:

Chạy php start.php stop và nhận được thông báo stop fail

Khả năng đầu tiên

Điều kiện là workerman được khởi động ở chế độ debug, nhà phát triển đã nhấn ctrl z trong terminal để gửi tín hiệu SIGSTOP cho workerman, dẫn đến workerman vào chế độ nền và bị treo (tạm dừng), do đó không thể phản hồi lệnh stop (tín hiệu SIGINT).

Giải pháp:
Nhập fg (gửi tín hiệu SIGCONT) trong terminal khởi động workerman sau đó nhấn Enter, chuyển workerman trở lại hoạt động ở chế độ nền, nhấn ctrl c (gửi tín hiệu SIGINT) để dừng workerman.

Nếu không thể dừng, hãy thử chạy hai lệnh sau

killall -9 php
ps aux|grep -i workerman|awk '{print $2}'|xargs kill -9

Khả năng thứ hai

Người dùng chạy lệnh stop và người dùng khởi động workerman không nhất quán, tức là người dùng stop không có quyền dừng workerman.

Giải pháp:
Chuyển sang người dùng khởi động workerman, hoặc sử dụng người dùng có quyền cao hơn để dừng workerman.

Khả năng thứ ba

Tệp pid của tiến trình chính workerman bị xóa, dẫn đến tập lệnh không tìm thấy tiến trình pid, dẫn đến việc dừng thất bại.

Giải pháp:
Lưu tệp pid ở vị trí an toàn, tham khảo hướng dẫn Worker::$pidFile.

Khả năng thứ tư

Tệp pid của tiến trình chính workerman không tương ứng với tiến trình workerman.

Giải pháp:
Mở tệp pid của tiến trình chính workerman để kiểm tra pid của tiến trình chính, tệp pid mặc định nằm trong thư mục song song với Workerman. Chạy lệnh ps aux | grep pid của tiến trình chính để xem tiến trình tương ứng có phải là tiến trình Workerman không, nếu không phải, có thể máy chủ đã khởi động lại, dẫn đến việc workerman lưu pid không còn hiệu lực, và pid này vừa đúng bị tiến trình khác sử dụng, dẫn đến dừng thất bại. Nếu là trường hợp này, chỉ cần xóa tệp pid là được.

Khả năng thứ năm

Đã cài đặt mở rộng grpc, nhưng không đặt biến môi trường tương ứng cho mở rộng grpc, sau khi khởi động sẽ tạo ra một tiến trình gắn kết, dẫn đến việc dừng thất bại.