เรียกใช้ไฟล์ PHP ในงาน cron โดยใช้ CPanel


102

ฉันแค่พยายามเรียกใช้สคริปต์ PHP โดยใช้ cron job ภายใน CPanel - นี่คือไวยากรณ์ที่ถูกต้อง:

/usr/bin/php -q /home/username/public_html/cron/cron.php >/dev/null

ฉันไม่ได้รับการแจ้งเตือนทางอีเมลใด ๆ ที่ระบุว่า cron เสร็จสมบูรณ์แล้วฉันจำเป็นต้องทำอะไรเฉพาะกับไฟล์ PHP หรือไม่


25
ฉันคิดว่ามันค่อนข้างเกี่ยวข้องเนื่องจากมีโครงการจำนวนมากโฮสต์บน Cpanel และเราจำเป็นต้องรู้วิธีเรียกใช้งาน cron หากจำเป็น
William

8
หากไม่อนุญาตให้ใช้ cPanel บน Server Fault หรือ Stack Overflow คำถามควรอยู่ที่ใด
brimstone

9
ค่อนข้างน่าขันที่คำถามนี้จัดอยู่ในประเภท 'นอกประเด็น' สำหรับ StackOverflow แต่เป็นคำถามที่มีการใช้งานมากที่สุดที่ฉันเคยมีที่นี่ ..... ฉันหวังว่ามันจะช่วยคนอื่นได้ :)
Zabs

Thanx @Tatu Ulmanen ได้ผลสำหรับฉัน!
Tushar Rmesh Saindane

คำตอบ:


66

ในระบบ crontab:

  • /usr/bin/phpเป็นเส้นทาง PHP ไบนารี (แตกต่างกันในบางระบบเช่น FreeBSD /usr/local/bin/php, Linux: /usr/bin/php)
  • /home/username/public_html/cron/cron.php ควรเป็นพา ธ สคริปต์ php ของคุณ
  • /dev/null ควรเป็นเอาต์พุต cron เช่น: /home/username/stdoutx.txt

ดังนั้นคุณสามารถตรวจสอบ cron ของคุณได้โดยการดูเอาต์พุต cron /home/username/stdoutx.txt


1
ฉันกำลังใช้สิ่งนี้อยู่ตอนนี้และใช้งานได้ แต่ฉันไม่ได้รับการแจ้งเตือนทางอีเมลใด ๆ เลยทำไมไม่? php /home/username/public_html/cron/cron.php หมายเหตุฉันต้องใส่บรรทัดต่อไปนี้ที่ด้านบนของสคริปต์ PHP #! / usr / bin / php -q
Zabs

หากคุณต้องการให้ cronjob ส่งอีเมลสำหรับคุณคุณต้องใช้ php mail () ฉันไม่คิดว่า cronjob มีระบบเมลอัตโนมัติเว้นแต่คุณจะใช้เชลล์สคริปต์หรือ php
Somy A

1
เมื่อฉันคลิกที่แท็บ "cronjobs" ใน cPanel จะมีสองช่องบนหน้า - หนึ่งช่องสำหรับคำสั่งที่คุณต้องการดำเนินการและอีกช่องสำหรับที่อยู่อีเมลที่คุณต้องการให้ส่งผลลัพธ์ไป นี่คือใน cPanel 11
user3640967

2
คำสั่งเต็มจะเป็นอย่างไร ฉันหมายถึงคำสั่งเต็มในบรรทัดเดียวพร้อมตัวเลือกทั้งหมด
Auj

@SomyA ได้โปรดบอกฉันคำสั่งสำหรับเรียกใช้ไฟล์สคริปต์ java
Narender Reddy

104

ฉันใช้คำสั่งนี้เพื่อเปิดใช้งาน cron สำหรับสิ่งนี้

/usr/bin/php -q /home/username/public_html/yourfilename.php

บนเซิร์ฟเวอร์ของ GoDaddy และทำงานได้ดี


2
สิ่งที่ไม่-qยืนหา?
Bhavik Shah

4
@BhavikShah ตามphp.net/manual/en/features.commandline.options.php , -qสำหรับโหมด Quiet ยับยั้งหัว HTTP เอาท์พุท
วิลเลียม

@ วิลเลียมขอบคุณ เข้าใจแล้ว
Bhavik Shah

29

>/dev/null หยุด cron จากการส่งอีเมล

ที่จริงแล้วในใจของฉันมันเป็นการดีกว่าที่จะสร้างphpสคริปต์ขึ้นมาเพื่อดูแลเกี่ยวกับการบันทึกแทนที่จะส่งออกบางสิ่งไปยัง cron


ฉันขอถามว่าคุณทำได้อย่างไร cronTabs ไม่ส่งออกไปยังบางสิ่งบางอย่างหรือไม่? ฉันทำ>/dev/null 2>&1ตอนจบเช่นกัน ...
ThomasK

@ThomasK ถ้าคุณทำงานแบบนี้/path/to/file.php > /dev/nullมันจะเงียบ
k102

19

นี่เป็นวิธีที่ง่ายที่สุด:

php -f /home/your_username/public_html/script.php

และถ้าคุณต้องการบันทึกเอาต์พุตสคริปต์ไปยังไฟล์ให้เพิ่มสิ่งนี้ที่ส่วนท้ายของคำสั่ง:

>> /home/your_username/logs/someFile.txt 2>&1




10

ฉันมีปัญหาในการใช้ / usr / bin / php บน CPanel เนื่องจากคอมไพล์เป็นไบนารี "cgi-fcgi" ไม่ใช่ "cli" ลองใช้ / usr / local / bin / php หรือเนื่องจากเป็นครั้งแรกในเส้นทางต่อไปเพียงใช้ 'php' แทน:

php /path/to/script.php

หากคุณต้องการรันสคริปต์เป็นไฟล์ปฏิบัติการให้ + x perms และใช้สิ่งต่อไปนี้เป็นบรรทัดแรกของสคริปต์:

#!/usr/bin/env php

6

ฉันหวังว่าปัญหาของคุณจะเกิดกับ path & php binary เช่นกัน หากคุณได้แก้ไขเส้นทางตามคำตอบที่เก่ากว่าโปรดใช้ php-cli แทนคำสั่ง php ขณะเรียกใช้งาน cron

มันอาจจะเป็นไปได้ที่จะไม่ได้กลับมาphp_sapi_name() cliมันกลับมาอย่างอื่นเช่นcgi-fcgiฯลฯ

/usr/bin/php-cli -q /home/username/public_html/cron/cron.php >/dev/null

ฉันหวังว่ามันจะช่วยได้


3

ใช้งานได้ดีและยังส่งอีเมล:

/ usr / bin / php /home/xxYourUserNamexx/public_html/xxYourFolderxx/xxcronfile.php

สองคำสั่งต่อไปนี้ใช้งานได้ดี แต่ไม่ต้องส่งอีเมล:

/ usr / bin / php -f / home / เหมือนกับด้านบน

php -f / home / เหมือนกับข้างบน




0

สำหรับMulti PHP Cron Jobเฉพาะโดเมนให้ทำเช่นนี้

/usr/local/bin/ea-php56 /home/username/domain_path/path/to/cron/script

ในตัวอย่างข้างต้นให้แทนที่“ ea-php56” ด้วยเวอร์ชัน PHP ที่กำหนดให้กับโดเมนที่คุณต้องการใช้

หวังว่านี่จะช่วยใครบางคนได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.