Điểm:0

Các tập lệnh python cập nhật mọi thứ trực tuyến có cần một môi trường ảo để chạy không?

lá cờ ng

Tôi đã cố gắng lên lịch một tập lệnh python trong cron để chạy hai lần một ngày. Tập lệnh sử dụng một vài API để lấy thông tin từ một trang web và cập nhật bảng tính google với thông tin. Tập lệnh đang hoạt động- Tôi có thể chạy thủ công mà không gặp vấn đề gì, nhưng khi tôi lên lịch để chạy từ một công việc định kỳ, tôi không thấy bất kỳ đầu ra nào.

Sau một chút khắc phục sự cố, tôi đã xem trang này - https://cronitor.io/cron-reference/cron-troubleshooting-guide

Tôi đã thực hiện tất cả các bước được đề xuất và đi đến cuối cùng có ghi:

"Đối với python, bạn có thể thấy rằng ứng dụng web của mình đang sử dụng môi trường ảo mà bạn cần gọi trong crontab của mình."

Làm cách nào để "gọi môi trường ảo" trong Ubuntu? Bây giờ tôi chỉ đang ở một thời điểm mà tôi không biết phải tiếp tục như thế nào. Nếu nó hữu ích, tôi đang chạy tập lệnh của mình trên raspberry pi 3b trên Ubuntu 20.04.3 LTS và tập lệnh của tôi đang sử dụng API Googlesheets.

CHỈNH SỬA: Những điều tôi đã làm cho đến nay để khắc phục sự cố:

  • Người dùng của tôi có quyền chạy cron

  • Tôi đang sử dụng các đường dẫn trực tiếp trong công việc định kỳ của mình

  • Tôi đã kiểm tra chron guru để đảm bảo rằng lịch trình cron của tôi đã được thiết lập một cách chính xác và nó là.

  • Tôi nhận được đầu ra từ một công việc định kỳ in ngày và giờ vào một tệp (* * * * * /path/to/python3.8 /path/to/script/Script.py >> log.txt) vì vậy tôi biết rằng nó đang hoạt động.

  • Tôi đã cấp quyền thực thi tập lệnh của mình với chmod +x Script.py

  • Tôi đã chắc chắn rằng người dùng của mình có quyền chạy tập lệnh

  • Tôi đã chắc chắn rằng có một dòng trống ở cuối tệp cron

  • Tôi đã tạo một tệp shell thực thi để thực thi tập lệnh

  • Tôi đã đảm bảo rằng cron đang sử dụng cùng thời gian với thời gian hệ thống

  • đuôi -f /var/log/syslog hiển thị đầu ra cho tập lệnh của tôi theo lịch trình lần nhưng khi tôi kiểm tra xem bảng tính của mình đã được cập nhật chưa thì không

  • Tôi đã thêm Shebang ở đầu tập lệnh python của mình

user535733 avatar
lá cờ cn
Môi trường ảo *có thể* liên quan đến tập lệnh python không cung cấp đầu ra như mong đợi. Tuy nhiên, có nhiều lý do phổ biến có nhiều khả năng hơn. Một tập lệnh chỉ loay hoay với Googlesheets không có lý do rõ ràng để cần một môi trường ảo. Tôi nghi ngờ bạn đang đi sai đường. Gắn bó với xử lý sự cố cron và python cơ bản cho đến khi bạn có câu trả lời rõ ràng hơn.
Pocketmouse avatar
lá cờ ng
Bạn có bất cứ đề nghị về những gì để thử tiếp theo? Tôi đã cập nhật bài đăng của mình với những thứ tôi đã thử (danh sách quá dài để đăng ở đây trong phần bình luận). Tôi gặp một chút bất lợi ở đây khi nói đến Ubuntu vì tôi không quen với nó như tôi là trăn. Tôi phải google mọi thứ và cho đến nay mọi thứ tôi tìm thấy đều không giúp được gì.
raj avatar
lá cờ cn
raj
Xin lưu ý rằng bài viết bạn trích dẫn nói về Python **ứng dụng web**. Ứng dụng web là ứng dụng chạy trên máy chủ web và nếu được viết bằng Python, chúng thực sự thường sử dụng môi trường ảo Python (venv). Đó không phải là trường hợp của bạn. Nếu bạn chỉ gọi tập lệnh của mình từ một dòng lệnh, thì có thể nó không sử dụng venv (bạn chắc chắn sẽ nhớ việc tạo venv cho nó nếu đúng như vậy :)). Đây đúng hơn là một vấn đề cron "cổ điển" - giá trị của `$PATH` hoặc các biến khác trong cron khác với trong shell tương tác và do đó, tập lệnh của bạn có thể không truy cập được một số mô-đun. Điều tra nó.
user535733 avatar
lá cờ cn
Khắc phục sự cố của bạn đã chứng minh rằng không có gì sai với cron. 99% thời gian, cron hoạt động bình thường và bạn thuộc nhóm đó. Việc khắc phục sự cố của bạn cũng đã chứng minh rằng bạn hiểu cách sử dụng và khắc phục sự cố cron đúng cách (làm tốt lắm!) Vì vậy, đã đến lúc tập trung vào tập lệnh của bạn: Thêm đầu ra gỡ lỗi vào tập lệnh của bạn. Tập lệnh này sẽ hiển thị trong tệp hoặc nhật ký cục bộ. Sử dụng đầu ra gỡ lỗi để thu hẹp phần nào trong tập lệnh của bạn có vấn đề.
Điểm:0
lá cờ in

Môi trường ảo Python là các cây thư mục độc lập chứa cài đặt Python cho một phiên bản Python cụ thể, cùng với một số gói bổ sung.

Giả sử tập lệnh của bạn sử dụng gói "yêu cầu" để thực hiện các yêu cầu HTTP. Nếu bạn đã cài đặt các yêu cầu trong môi trường ảo, thì bạn cần đảm bảo rằng môi trường ảo đang hoạt động khi tập lệnh của bạn chạy từ cron. Nếu không, bạn sẽ nhận được ImportError: Không có mô-đun nào có tên yêu cầu.

Mặt khác, nếu bạn đã cài đặt các yêu cầu trên toàn hệ thống và không sử dụng môi trường ảo, thì bạn cũng không cần phải lo lắng về chúng trong ngữ cảnh cron.


Đây là những gì tôi sẽ làm để khắc phục sự cố cụ thể của bạn: Tôi sẽ thêm các câu lệnh ghi nhật ký vào tập lệnh để kiểm tra các giả định và giả thuyết: tập lệnh có bắt đầu không? Nó có chạy đầy đủ không? Nếu nó thực hiện các yêu cầu HTTP, thì nó sẽ lấy lại trạng thái HTTP nào?

Có lẽ tập lệnh đưa ra một ngoại lệ, nhưng ngoại lệ đó không được ghi lại ở bất kỳ đâu. Đoạn mã này chỉ ghi lại thiết bị xuất chuẩn:

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

Thay đổi nó để cũng chụp stderr:

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

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.