เหตุใดคำสั่ง wget เดียวทำงานใน crontab ของฉัน


15

ฉันต้องการดึงเนื้อหาจากสคริปต์ PHP บนเซิร์ฟเวอร์ของฉันวันละสองครั้งการเปลี่ยนตัวแปรคิวรีlangเพื่อตั้งค่าภาษาที่เราต้องการและบันทึกเนื้อหานี้เป็นไฟล์สองภาษา นี่คือ crontab ของฉัน:

*/15 * * * * ~root/apache.sh > /var/log/checkapache.log
10 0 * * * wget -O /path/to/file-sv.sql "http://mydomain.com/path/?lang=sv"
11 0 * * * wget -O /path/to/file-en.sql "http://mydomain.com/path/?lang=en"

ปัญหาคือบรรทัดคำสั่ง wget แรกเท่านั้นที่ถูกเรียกใช้งาน (หรือแม่นยำ: ไฟล์เดียวที่กำลังถูกเขียนคือ/path/to/file-sv.sql) ถ้าฉันสลับแถวที่สองและสามให้/path/to/file-en.sqlเขียนแทน บรรทัดแรกจะทำงานตามที่คาดไว้เสมอไม่ว่าจะอยู่ที่ไหน

ฉันลองใช้โดยlynx -dump "http://mydomain.com/path/?lang=xx" > /path/to/file-xx.sqlไม่มีประโยชน์ ยังคงมีเพียงบรรทัดคมแรกที่ดำเนินการสำเร็จ แม้แต่การผสม wget และ lynx ก็ไม่ได้เปลี่ยนแปลงสิ่งนี้!

เริ่มสิ้นหวัง! ฉันพลาดอะไรไปรึเปล่า? มีบทความมากมายใน crontab (รวมกับ) wget หรือ lynx แต่ดูเหมือนว่าทั้งหมดจะครอบคลุมการตั้งค่าพื้นฐานและไวยากรณ์ มีใครบ้างที่รู้ว่าฉันกำลังทำอะไรผิดหรือเปล่า?

ขอบคุณ
อเล็กซานเดอร์


คุณแน่ใจหรือไม่ว่าเมื่อใดก็ตามที่คุณเข้าถึงmydomain.com/path/?lang=th มีบางอย่างกลับมา คุณลองทำสิ่งนี้จากบรรทัดคำสั่งเพื่อดูว่าเกิดอะไรขึ้น (wget -O - mydomain.com/path/?lang=th )
Torian

1
ฉันจะลองลบและสร้างการขึ้นบรรทัดใหม่ระหว่าง 2 และ 3
Antonius Bloch

แนวปฏิบัติที่เหมาะสมที่สุดคือการระบุพา ธ เต็มไปยังไฟล์ที่เรียกทำงานได้ใน crontab กดไลค์: "/ usr / bin / wget" ฉันไม่คิดว่านี่จะช่วยคุณได้เพราะ crons อย่างใดอย่างหนึ่งทำงานได้
Antonius Bloch

จะปรากฏอะไรในบันทึกของ cron เมื่อสิ่งนี้เกิดขึ้น
ถั่ว

@Torian: ทำงานเหมือนมีเสน่ห์
Alexander Wallin

คำตอบ:


42

ลองเพิ่มบรรทัดใหม่ที่ท้าย crontab ของคุณ


1
คุณมาจากสวรรค์! นั่นมัน! ฉันจะให้คะแนนคุณถ้าฉันมีชื่อเสียง :)
Alexander Wallin

1
@gelraen แต่ ... ทำไมล่ะ
ซามูเอล

2

มีบางอย่างเกี่ยวกับข้อความที่ผิด แก้ไข crontab ของคุณเป็นกลุ่มแล้วแสดงตัวอักษรที่มองไม่เห็น

:set invlist

คุณควรเห็นและแก้ไขให้ถูกต้อง


ผิดอย่างไร ฉันจะแก้ไขใน Vim ได้อย่างไร? ฉันลองเขียนใหม่ทั้งไฟล์ในกรณีที่การคัดลอกวางอาจทำให้เกิดปัญหา
Alexander Wallin

@afEkenholm: คุณจะแก้ไขได้อย่างไร?
bahamat

1
@bahamat:# crontab -e
Alexander Wallin

@afEkenholm: ทำสิ่งนี้:EDITOR=vim crontab -e
bahamat

@bahamat: ทุกอย่างดูดี มีสีม่วง$ที่ส่วนท้ายของแต่ละบรรทัดหรือไม่
Alexander Wallin

1

ลองเพิ่มการเปลี่ยนเส้นทางเพื่อดีบัก crontab (หรืออ่านเมลหลัก):

11 0 * * * wget -O /path/to/file-en.sql "http://mydomain.com/path/?lang=en" > /tmp/crontab_ouptput 2> /tmp/crontab_error

นอกจากนี้ให้เรียกใช้ 'wget -O /path/to/file-en.sql " http://mydomain.com/path/?lang=th " "จากคอนโซล

ใช้ 'crontab -e' เพื่อตรวจสอบ crontab ใหม่

นอกจากนี้ลองลบไม่ทำงานและพิมพ์อีกครั้งจากแป้นพิมพ์

สำรองคำสั่ง corntab และ run:

crontab -l | crontab -

การเพิ่ม/tmp/crontab_ouptput 2> /tmp/crontab_errorใช้ได้เฉพาะกับบรรทัดแรกเท่านั้น การรันคำสั่งจากคอนโซลทำงานได้ดี เขียนทับไฟล์ทั้งหมดด้วยมือเปล่าของฉัน แต่ไม่มีอะไรเปลี่ยนแปลง
Alexander Wallin

สำรองข้อมูล crontab แล้วลอง: crontab -l | crontab -
alvosu

ขอบคุณสำหรับความพยายาม @alvosu แต่การขึ้นบรรทัดใหม่ง่าย ๆ ก็เป็นการหลอกลวง!
Alexander Wallin

1

ฉันเพียงแค่ใช้เวลาพยายามคำตอบข้างต้น (เพิ่มขึ้นบรรทัดใหม่ลบบรรทัดใหม่ ฯลฯ ) ในระบบการทำงานcronie ในที่สุดก็พบว่ามีข้อผิดพลาดในcronie 1.5.3ที่ดำเนินงาน cron แรกสำหรับผู้ใช้แต่ละคนเท่านั้น มันได้รับการแก้ไขใน1.5.4

https://github.com/cronie-crond/cronie/issues/30

หวังว่านี่จะช่วยประหยัดเวลาบางคน ...

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