หน้า 1 จากทั้งหมด 1

ไฟล์ php รันแบบ manual เวอร์คดี แต่รันใน crontab ไม่เวอร์ค

โพสต์โพสต์แล้ว: 14 เม.ย. 2019 01:54
โดย nuiz
พอดีผมเจอปัญหานี้กับตัวเองครับ เขียน php script ไว้รันอัพเดท IP Address ใน Script มีเรียกใช้คำสั่งบน Linux ด้วย เขียนเสร็จก็ลองรันแบบ Manual ก็รันได้ปกติครับ แต่พอเอาไปใส่ไว้ใน Crontab ปรากฏว่า... ไม่ทำงานเฉยเลยครับ เป็นงงอยู่ตั้งนาน

สรุปว่า...
ถ้าจะรัน php ใน Crontab ตรงไหนที่ใช้ฟังก์ชั่น shell_exec(); หรือ exec(); หรือ system(); เพื่อเรียกใช้งานคำสั่งบน Linux เราต้องใส่ Path เต็มของคำสั่งนั้นเสมอครับ เช่น

$cmd="asterisk -rx 'sip show peers'"; อย่างนี้จะรันบน Crontab ไม่ได้ (ถ้าเรา debug ดูจะเห็นข้อความว่าหาคำสั่ง asterisk ไม่เจอ) เราต้องใส่ Path เต็มของคำสั่ง asterisk แบบนี้ครับ

$cmd="/usr/sbin/asterisk -rx 'sip show peers'";

ปล.
ถ้าเรารันแบบ Manual จะใส่ Path เต็มหรือไม่ก็ได้ครับ

วิธีการ Debug ดูตอนรัน Crontab ทำดังนี้
1. สร้างไฟล์เก็บ Log
touch /root/cron.error

2. ใน Crontab ให้ส่งข้อความไปที่ไฟล์ Log (ใส่ * 5 อัน จะรันทุก 1 นาที)
* * * * * /usr/bin/php /usr/sbin/updateip.php &> /root/cron.error

3. แล้วคอยดูข้อมูลในไฟล์ Log
tail -f /root/cron.error

ถ้ามีอะไรเกิดขึ้นในขณะที่ Crontab ทำงานเราก็จะเห็นครับ