พอดีผมเจอปัญหานี้กับตัวเองครับ เขียน 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 ทำงานเราก็จะเห็นครับ