Score:0

สคริปต์ไพ ธ อนที่อัปเดตสิ่งต่าง ๆ ทางออนไลน์จำเป็นต้องมีสภาพแวดล้อมเสมือนเพื่อทำงานหรือไม่

ธง ng

ฉันพยายามมาระยะหนึ่งเพื่อกำหนดเวลาสคริปต์ไพ ธ อนใน cron ให้ทำงานวันละสองครั้ง สคริปต์ใช้ API สองสามตัวเพื่อดึงข้อมูลจากเว็บไซต์และอัปเดตสเปรดชีตของ Google ด้วยข้อมูล สคริปต์ทำงานอยู่ ฉันสามารถเรียกใช้ด้วยตนเองได้โดยไม่มีปัญหา แต่เมื่อฉันกำหนดเวลาให้สคริปต์ทำงานจากงาน cron ฉันไม่เห็นผลลัพธ์ใดๆ

หลังจากแก้ไขปัญหาเล็กน้อย ฉันพบหน้านี้ - https://cronitor.io/cron-reference/cron-troubleshooting-guide

ฉันทำตามขั้นตอนที่แนะนำทั้งหมดและไปที่ด้านล่างซึ่งมีข้อความว่า:

"สำหรับ python คุณอาจพบว่าเว็บแอปของคุณใช้สภาพแวดล้อมเสมือนที่คุณต้องเรียกใช้ใน crontab"

ฉันจะ "เรียกใช้สภาพแวดล้อมเสมือนจริง" ใน Ubuntu ได้อย่างไร ตอนนี้ฉันอยู่ในจุดที่ไม่รู้จะไปต่อยังไง ถ้ามันช่วยได้ ฉันกำลังเรียกใช้สคริปต์จาก raspberry pi 3b บน Ubuntu 20.04.3 LTS และสคริปต์ของฉันกำลังใช้ Googlesheets API

แก้ไข: สิ่งที่ฉันได้ทำไปแล้วเพื่อแก้ไขปัญหา:

  • ผู้ใช้ของฉันมีสิทธิ์เรียกใช้ cron

  • ฉันใช้เส้นทางตรงในงาน cron ของฉัน

  • ฉันได้ตรวจสอบ chron guru เพื่อให้แน่ใจว่ากำหนดการ cron ของฉันถูกกำหนดไว้ อย่างถูกต้องและเป็น

  • ฉันได้รับเอาต์พุตจากงาน cron ที่พิมพ์วันที่และเวลาไปยังไฟล์ (* * * * * /path/to/python3.8 /path/to/script/Script.py >> log.txt) ดังนั้นฉันจึงรู้ว่ามันได้ผล

  • ฉันให้สิทธิ์ในการเรียกใช้สคริปต์กับ chmod +x Script.py

  • ฉันแน่ใจว่าผู้ใช้ของฉันได้รับอนุญาตให้เรียกใช้สคริปต์

  • ฉันแน่ใจว่ามีบรรทัดว่างที่ส่วนท้ายของไฟล์ cron

  • ฉันได้สร้างไฟล์เชลล์ปฏิบัติการที่รันสคริปต์

  • ฉันแน่ใจว่า cron ใช้เวลาเดียวกันกับเวลาของระบบ

  • หาง -f /var/log/syslog แสดงผลสำหรับสคริปต์ของฉันตามกำหนดเวลา ครั้ง แต่เมื่อฉันตรวจสอบว่าสเปรดชีตของฉันได้รับการอัปเดตหรือไม่

  • ฉันได้เพิ่ม shebang ที่ด้านบนสุดของสคริปต์หลามแล้ว

user535733 avatar
cn flag
สภาพแวดล้อมเสมือน *อาจ* เกี่ยวข้องกับสคริปต์ไพธอนที่ล้มเหลวในการแสดงผลลัพธ์ที่คาดหวัง อย่างไรก็ตาม มีสาเหตุทั่วไปหลายประการที่น่าจะเป็นไปได้มากกว่า สคริปต์ที่ใช้เล่นซอกับ Google ชีตเท่านั้นไม่มีเหตุผลชัดเจนว่าต้องการสภาพแวดล้อมเสมือนจริง ฉันสงสัยว่าคุณกำลังอยู่บนเส้นทางที่ผิด ใช้การแก้ไขปัญหาเบื้องต้นเกี่ยวกับ cron และ python จนกว่าคุณจะได้คำตอบที่ชัดเจนกว่านี้
Pocketmouse avatar
ng flag
คุณมีข้อเสนอแนะเกี่ยวกับสิ่งที่ควรลองต่อไปหรือไม่? ฉันได้อัปเดตโพสต์ของฉันด้วยสิ่งที่ฉันได้ลองไปแล้ว (รายการยาวเกินไปที่จะโพสต์ที่นี่ในความคิดเห็น) ฉันเสียเปรียบเล็กน้อยที่นี่เมื่อพูดถึง Ubuntu เนื่องจากฉันไม่คุ้นเคยกับมันเหมือนกับงูหลาม ฉันต้อง google ทุกอย่างและทุกสิ่งที่ฉันพบไม่ได้ช่วย
raj avatar
cn flag
raj
โปรดทราบว่าบทความที่คุณยกมาพูดถึง Python **เว็บแอป** เว็บแอปเป็นแอปที่ทำงานบนเว็บเซิร์ฟเวอร์ และถ้าเขียนด้วย Python จริง ๆ แล้ว พวกเขามักจะใช้ Python virtual environment (venv) นั่นไม่ใช่กรณีของคุณ หากคุณเพิ่งเรียกสคริปต์ของคุณจากบรรทัดคำสั่ง สคริปต์นั้นอาจไม่ใช้ venv (คุณจะต้องจำการสร้าง venv ให้กับมันอย่างแน่นอน หากเป็นกรณีนี้ :)) มันค่อนข้างเป็นปัญหา cron "คลาสสิค" - ค่าของ `$PATH` หรือตัวแปรอื่นๆ ใน cron นั้นแตกต่างจากในเชลล์แบบโต้ตอบ และด้วยเหตุนี้ สคริปต์ของคุณอาจไม่สามารถเข้าถึงบางโมดูลได้ ตรวจสอบมัน
user535733 avatar
cn flag
การแก้ไขปัญหาของคุณแสดงให้เห็นว่าไม่มีอะไรผิดปกติกับ cron 99% ของเวลา cron ทำงานอย่างถูกต้อง และคุณอยู่ในกลุ่มนั้น การแก้ไขปัญหาของคุณยังแสดงให้เห็นว่าคุณเข้าใจวิธีใช้และแก้ไขปัญหา cron อย่างถูกต้อง (ทำได้ดีมาก!) ดังนั้น ถึงเวลาแล้วที่จะต้องมุ่งเน้นไปที่สคริปต์ของคุณ: เพิ่มเอาต์พุตการดีบักให้กับสคริปต์ซึ่งจะแสดงในบันทึกหรือไฟล์ในเครื่อง ใช้ผลลัพธ์การแก้ไขข้อบกพร่องเพื่อจำกัดขอบเขตของสคริปต์ที่มีปัญหาให้แคบลง
Score:0
ธง in

สภาพแวดล้อมเสมือนของ Python เป็นโครงสร้างไดเร็กทอรีที่มีอยู่ในตัวเองซึ่งมีการติดตั้ง Python สำหรับ Python เวอร์ชันเฉพาะ รวมถึงแพ็คเกจเพิ่มเติมจำนวนหนึ่ง

สมมติว่าสคริปต์ของคุณใช้แพ็คเกจ "คำขอ" เพื่อสร้างคำขอ HTTP หากคุณติดตั้งคำขอในสภาพแวดล้อมเสมือน คุณจะต้องตรวจสอบให้แน่ใจว่าสภาพแวดล้อมเสมือนนั้นทำงานอยู่เมื่อสคริปต์ของคุณเรียกใช้จาก cron มิฉะนั้นคุณจะได้รับ ImportError: ไม่มีการร้องขอชื่อโมดูล.

ในทางกลับกัน หากคุณติดตั้งคำขอทั้งระบบและไม่ได้ใช้สภาพแวดล้อมเสมือนจริง คุณก็ไม่จำเป็นต้องกังวลเกี่ยวกับสิ่งเหล่านี้ในบริบท cron


ต่อไปนี้คือสิ่งที่ฉันจะทำเพื่อแก้ไขปัญหาเฉพาะของคุณ ฉันจะเพิ่มคำสั่งการบันทึกในสคริปต์เพื่อตรวจสอบสมมติฐานและสมมติฐาน: สคริปต์เริ่มต้นเลยหรือไม่ วิ่งได้เต็มที่ไหม? หากส่งคำขอ HTTP จะได้รับสถานะ HTTP ใดกลับมา

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

* * * * * /path/to/python3.8 /path/to/script/Script.py >> log.txt 

เปลี่ยนเป็นจับ stderr ด้วย:

* * * * * /path/to/python3.8 /path/to/script/Script.py >> log.txt 2>&1

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา