หยุดไม่สำเร็จ
อาการ:
รัน php start.php stop
แล้วขึ้นข้อความ stop fail
กรณีที่ 1
การรัน workerman ในโหมด debug และผู้พัฒนากด ctrl z
ใน terminal ซึ่งทำให้ workerman ได้รับสัญญาณ SIGSTOP
และเข้าสู่โหมดพัก (suspend) ทำให้ไม่สามารถตอบสนอง stop คำสั่งได้ (รับสัญญาณ SIGINT
)
การแก้ไข:
ใน terminal ที่รัน workerman ให้พิมพ์ fg
(ส่งสัญญาณ SIGCONT
) และกด Enter เพื่อย้าย workerman กลับมาทำงานหน้าจอหลัก จากนั้นกด ctrl c
(ส่งสัญญาณ SIGINT
) เพื่อหยุด workerman
ถ้าหยุดไม่ได้ ลองรันคำสั่งดังนี้
killall -9 php
ps aux|grep -i workerman|awk '{print $2}'|xargs kill -9
กรณีที่ 2
ผู้ใช้ที่รันคำสั่ง stop และผู้ใช้ที่สั่งให้ workerman เริ่มทำงานไม่เหมือนกัน ซึ่งหมายความว่าผู้ใช้ที่ stop ไม่มีสิทธิ์ในการหยุด workerman
การแก้ไข:
เปลี่ยนไปใช้ผู้ใช้ที่รัน workerman หรือใช้ผู้ใช้ที่มีสิทธิ์สูงกว่าในการหยุด workerman
กรณีที่ 3
ไฟล์ pid ของกระบวนการหลักของ workerman ถูกลบทำให้สคริปต์ไม่พบ pid ของกระบวนการ ทำให้หยุดไม่สำเร็จ
การแก้ไข:
บันทึกไฟล์ pid ไว้ในที่ปลอดภัย ดูรายละเอียดได้ที่Worker::$pidFile
กรณีที่ 4
ไฟล์ pid ของกระบวนการหลักของ workerman ไม่ตรงกับกระบวนการของ workerman
การแก้ไข:
เปิดไฟล์ pid ของกระบวนการหลักของ workerman เพื่อดู pid ของกระบวนการหลัก ไฟล์ pid ที่ไว้ค่าเริ่มต้นอยู่ในโฟลเดอร์เดียวกันกับ Workerman จากนั้นรันคำสั่ง ps aux | grep 主进程pid
เพื่อตรวจสอบว่ากระบวนการที่ตรงกันกับ Workerman หรือไม่ หากไม่ตรงกัน อาจจะเกิดจากการรีสตาร์ทเซิร์ฟเวอร์ทำให้ pid ที่ workerman บันทึกไว้มีค่าเก่าและถูกใช้โดยกระบวนการอื่น ๆ หากอยู่ในกรณีนี้ ลบไฟล์ pid ทิ้งก็จะทำให้บันทึก pid ใหม่ได้
กรณีที่ 5
ติดตั้งส่วนขยาย grpc แต่ไม่ได้ตั้งค่าตัวแปรสภาพแวดล้อมที่เกี่ยวข้อง ทำให้ในขณะเริ่มต้น มีกระบวนการซ้อนทับออกมา และทำให้หยุดไม่สำเร็จ