ฉันจะใช้ curl ในงาน cron ได้อย่างไร


12

ฉันต้องตั้งค่างาน cron ใน cpanel ที่เรียก URL (บนเซิร์ฟเวอร์เดียวกัน) สัปดาห์ละครั้ง ฉันจะใช้wgetแต่ปรากฎว่าสิ่งนี้ถูกปิดใช้งานบนเซิร์ฟเวอร์ที่ใช้ร่วมกัน

มีทางเลือกอื่นในการwgetหรือไม่? ฉันได้ยินมาว่าสามารถใช้curlได้ แต่ฉันไม่รู้วิธีตั้งค่านั้นในคำสั่ง cron

นอกจากนี้คำสั่งที่ทำให้ cronjob ไม่ทำอะไรให้เสร็จสมบูรณ์?

ความคิดใด ๆ ชื่นชมอย่างมาก!


1
wget จะทำอะไรถ้าคุณสามารถใช้มันได้?
user9517

ทำไมพวกเขาจะอนุญาตให้ขดในกรณีที่พวกเขาปิดใช้งาน wget
andol

@Iain - จำเป็นต้องประมวลผลสคริปต์ PHP
davidhyland

@Andol - คำถามที่ดีมาก นั่นเป็นเพียงวิธีการ
davidhyland

คำตอบ:


20

แทนที่จะใช้ wget, curl ทำงานเช่นนี้:

curl --silent http://domain.com/cron.php

ซึ่งจะทำงานในลักษณะเดียวกับ wget หากเป็นไฟล์ php ที่คุณกำลังเปิดตัวมีเหตุผลใด ๆ ที่คุณไม่สามารถเรียกใช้งานได้ผ่านทางบรรทัดคำสั่งล่าม php ดังนี้:

php -q /path/to/cron.php

เหมือนกันกับคำขอเว็บเซิร์ฟเวอร์และมักจะทำงานได้เร็วขึ้นมากและไม่มีข้อ จำกัด การหมดเวลาบางอย่างเมื่อเรียกผ่านเว็บเซิร์ฟเวอร์ / curl


การเรียก curl ด้วยวิธีนั้นจะพิมพ์ผลลัพธ์ไปที่ stdout หากคุณต้องการทำงานเทียบเท่า wget และบันทึกผลลัพธ์ไปยังชื่อไฟล์ตาม URL คุณยังต้องการเพิ่ม --remote-name flag
andol

- เงียบหมายความว่าไม่มีการตอบสนองหรือเอาท์พุท?
davidhyland

1
นอกจากนี้การเรียกสคริปต์ php จากบรรทัดคำสั่งอาจไม่จำเป็นต้องให้ผลลัพธ์ที่เหมือนกัน นอกเหนือจากความเป็นไปได้ของการกำหนดค่าที่แตกต่างกันแล้วยังมีสถานการณ์ที่ไม่ธรรมดาของสคริปต์ที่จะถูกเรียกใช้ในฐานะผู้ใช้ที่แตกต่างกัน ทุกอย่างขึ้นอยู่กับการตั้งค่า
andol

ฉันได้มันมาทำงานโดยใช้ "curl --silent domain.com/script.php > / dev / null 2> & 1" แต่มันก็ใช้ได้ดีกับ "curl -o --url domain.com/script.php > / dev / null 2> & 1 "ความแตกต่างคืออะไร
davidhyland

1
คำสั่งแรกส่งเอาต์พุตทั้งหมดไปยัง / dev / null อันที่สองจะสร้างไฟล์ที่เรียกว่า-urlในโฮมไดเร็กทอรีของผู้ใช้ที่รันสคริปต์ซึ่งมีเอาต์พุตของไฟล์ php ของคุณเอาต์พุตอื่น ๆ ทั้งหมดไปที่ / dev / null
user9517

6

ถ้ามีขดคุณสามารถลองได้

1 1 * * 0  /usr/bin/curl --silent http://example.come/some.php &>/dev/null

นั่นน่าจะเป็นสาเหตุให้ curl เงียบสนิทดังนั้นคุณจะไม่ได้รับอีเมลใด ๆ เมื่อดำเนินการเสร็จ


4
ฉันขอแนะนำให้ใช้ตัวเลือก - แสดงข้อผิดพลาดด้วยดังนั้นจึงเงียบสำหรับการทำงานปกติ แต่จะให้ข้อผิดพลาดหากเกิดขึ้น
emerino

6

ฉันขอแนะนำให้เพิ่มพารามิเตอร์ "-m" เพิ่มเติมจาก --silent เนื่องจากพารามิเตอร์นี้ตั้งค่าเวลาสูงสุดที่อนุญาตสำหรับการถ่ายโอน ลองนึกภาพคุณเรียก cron ทุกนาทีและสคริปต์ใช้เวลา 2 นาทีซึ่งอาจมีผลเสียต่อโหลดเซิร์ฟเวอร์หรือสิ่งอื่น ๆ

1 1 * * 0  /usr/bin/curl -m 120 -s http://example.come/some.php &>/dev/null
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.