Hướng dẫn python schedule every minute - lịch trình trăn mỗi phút

Tôi đang chạy một trình thu thập thông tin cứ sau 30 phút bằng lịch trình Python và tôi muốn trình thu thập thông tin của mình chạy trong khoảng thời gian chính xác 30 phút được tính toán dựa trên thời gian của hệ thống (Ex Mac, Windows, Linux).system's time(ex mac, windows, linux).

Dưới đây là mã của tôi và nó đang bị trì hoãn một phút mỗi khi nó được thực thi.

schedule.every(30).minutes.do(crawl)

while True:
    schedule.run_pending()
    time.sleep(1)

Đã hỏi ngày 8 tháng 6 lúc 17:39Jun 8 at 17:39

Hướng dẫn python schedule every minute - lịch trình trăn mỗi phút

4

Đối số cho thời gian.s ngủ là trong vài giây. Vì vậy, nhiều nhất là bạn nên nghỉ 1 giây. Không một phút. Nếu bạn tắt 1 phút, đó có lẽ là thời gian để thực hiện

Minute Hour Day Month Day_of_the_Week  

┌───────────── minute (0 - 59)
│ ┌───────────── hour (0 - 23) 
│ │ ┌───────────── day of month (1 - 31)
│ │ │ ┌───────────── month (1 - 12)
│ │ │ │ ┌───────────── day of week (0 - 6) (Sunday to Saturday;
│ │ │ │ │                                       7 is also Sunday on some systems)
│ │ │ │ │
│ │ │ │ │
* * * * *  command to execute
3

Từ các tài liệu, bạn có thể sử dụng chức năng

Minute Hour Day Month Day_of_the_Week  

┌───────────── minute (0 - 59)
│ ┌───────────── hour (0 - 23) 
│ │ ┌───────────── day of month (1 - 31)
│ │ │ ┌───────────── month (1 - 12)
│ │ │ │ ┌───────────── day of week (0 - 6) (Sunday to Saturday;
│ │ │ │ │                                       7 is also Sunday on some systems)
│ │ │ │ │
│ │ │ │ │
* * * * *  command to execute
4 để chạy một công việc tại một thời điểm cụ thể. Tôi không nghĩ rằng nó sẽ hoạt động cứ sau 1/2 giờ. Vì vậy, tôi nghĩ rằng bạn có thể cần hai công việc

schedule.every().hour.at(':00').do(crawl)
schedule.every().hour.at(':30').do(crawl)

while True:
    schedule.run_pending()
    time.sleep(1)

Đã trả lời ngày 8 tháng 6 lúc 20:47Jun 8 at 20:47

Hướng dẫn python schedule every minute - lịch trình trăn mỗi phút

BfrisBfrisbfris

4.7661 Huy hiệu vàng19 Huy hiệu bạc33 Huy hiệu đồng1 gold badge19 silver badges33 bronze badges

0

Chắc hẳn cronjob đã không còn xa lạ gì với dân dev như chúng ta, hôm nay mình xin giới thiệu việc quản lý các cronjob ứng dụng trong dự án python với package python-crontab.

1. Crontab là gì

Trong quá trình quản trị hệ thống, cần phải thực hiện các background jobs trên máy chủ để thực hiện các tác vụ thông thường. Cron là một quá trình hệ thống được sử dụng để thực hiện các background tasks trên cơ sở thường xuyên. Cron yêu cầu một tệp có tên là crontab chứa danh sách các tác vụ được thực thi tại một thời điểm cụ thể. Tất cả các job này được thực hiện trong background tại thời điểm quy định.

Cron là một tiện ích phần mềm cho phép chúng ta lên lịch các tác vụ trên các hệ thống giống Unix. Tên này bắt nguồn từ từ tiếng Hy Lạp "Chronos", có nghĩa là "thời gian". Các task trong Cron được định nghĩa trong một crontab, là một tệp văn bản chứa các lệnh được thực hiện.

Python giới thiệu cho chúng ta module crontab để quản lý các job đã lên lịch thông qua Cron. Các chức năng có sẵn trong nó cho phép chúng ta truy cập Cron, tạo công việc, đặt giới hạn, xóa công việc và hơn thế nữa. Trong bài này, chúng tôi sẽ giới thiệu cho các bạn cách sử dụng các hoạt động, chi tiết docs ở https://pypi.python.org/pypi/python-crontab.

2. Cú pháp trong crontab

Để xem các cron jobs đang chạy trên hệ thống của bạn: crontab -l

Lệnh trên hiển thị danh sách các job trong tệp crontab. Để thêm job cron mới vào crontab: crontab -e

Cron sử dụng một cú pháp cụ thể để xác định thời gian biểu. Nó bao gồm năm lĩnh vực, được phân cách bằng khoảng trắng. Các trường là:

Minute Hour Day Month Day_of_the_Week  

┌───────────── minute (0 - 59)
│ ┌───────────── hour (0 - 23) 
│ │ ┌───────────── day of month (1 - 31)
│ │ │ ┌───────────── month (1 - 12)
│ │ │ │ ┌───────────── day of week (0 - 6) (Sunday to Saturday;
│ │ │ │ │                                       7 is also Sunday on some systems)
│ │ │ │ │
│ │ │ │ │
* * * * *  command to execute

giống cú pháp của gem whenever trong rails phải không =))

Cron cũng chấp nhận các ký tự đặc biệt để bạn có thể tạo ra các lịch trình thời gian phức tạp hơn. Các ký tự đặc biệt có ý nghĩa sau:

| Character | Meaning | | Comma | Để tách nhiều giá trị | | Hyphen | Để chỉ ra một loạt các giá trị | | Asterisk | Để chỉ ra tất cả các giá trị có thể | | Forward slash | Để chỉ EVERY |

ví dụ:

  1. ** * * * * * ** có nghĩa là: mỗi phút của mỗi giờ mỗi ngày trong tháng cho mỗi tháng cho mỗi ngày trong tuần.
  2. 0 16 1,10,22 * * yêu cầu cron chạy một task lúc 4 giờ chiều (đó là giờ thứ 16) vào ngày 1, 10 và 22 hàng tháng.

3. Cài đặt

pip install python-crontab

import vào chương trình

from crontab import CronTab

4. Truy cập vào Crontab

Có năm cách để bao gồm một job trong cron. Trong số đó, ba công trình trên Linux chỉ và hai công trình cũng có thể được sử dụng trên Windows:

Cách đầu tiên để truy cập cron là sử dụng tên người dùng. Cú pháp như sau:

cron = CronTab(user='username')  
# or
cron = CronTab()
# or
cron = CronTab(user=True)  

Có thêm hai cú pháp cũng sẽ hoạt động trên Windows.

cron = CronTab(tabfile='filename.tab')  

cron = CronTab(tab="""* * * * * command""")  

5. Tạo cronjob mới

Tạo một chương trình Python có tên là writeDate.py. Bên trong writeDate.py, để in ngày và giờ hiện tại vào một tệp

import datetime
 
with open('dateInfo.txt','a') as outFile:
    outFile.write('\n' + str(datetime.datetime.now()))

để writeDate.py chạy mỗi phút. Tạo một tệp có tên scheduleCron.py.

from crontab import CronTab
 
my_cron = CronTab(user='nguyenchithanh')
job = my_cron.new(command='python /home/writeDate.py')
job.minute.every(1)
 
my_cron.write()

để chạy lập lịch

python scheduleCron.py

Đợi một chút và kiểm tra xem tệp dateInfo.txt với ngày giờ hiện tại. Tệp này sẽ được cập nhật từng phút và ngày và giờ hiện tại sẽ được thêm vào nội dung hiện có.

6. Cập nhật một job Cron hiện có

Để cập nhật một cronjob hiện có, bạn cần tìm cronjob bằng cách sử dụng lệnh hoặc bằng cách sử dụng một Id. Bạn có thể đặt Id thành cronjob dưới dạng comment khi tạo cronjob bằng python-crontab. Đây là cách bạn có thể tạo một cron job với một comment:

schedule.every().hour.at(':00').do(crawl)
schedule.every().hour.at(':30').do(crawl)

while True:
    schedule.run_pending()
    time.sleep(1)
0

cập nhật cronjob:

schedule.every().hour.at(':00').do(crawl)
schedule.every().hour.at(':30').do(crawl)

while True:
    schedule.run_pending()
    time.sleep(1)
1

7. Xóa job khỏi Crontab

schedule.every().hour.at(':00').do(crawl)
schedule.every().hour.at(':30').do(crawl)

while True:
    schedule.run_pending()
    time.sleep(1)
2

hoặc

schedule.every().hour.at(':00').do(crawl)
schedule.every().hour.at(':30').do(crawl)

while True:
    schedule.run_pending()
    time.sleep(1)
3

8. Kiểm tra lịch job

Để làm việc này, bạn sẽ cần module croniter được cài đặt trên hệ thống của bạn. Khi bạn đã cài đặt croniter, hãy gọi phương thức lịch biểu trên job để nhận lịch biểu job.

schedule.every().hour.at(':00').do(crawl)
schedule.every().hour.at(':30').do(crawl)

while True:
    schedule.run_pending()
    time.sleep(1)
4

Bạn thậm chí có thể lấy lịch trước đó bằng cách sử dụng phương thức get_prev.

9. Đặt giới hạn

Một trong những ưu điểm chính của việc sử dụng mô-đun crontab của Python là chúng ta có thể thiết lập các hạn chế thời gian mà không cần phải sử dụng cú pháp của cron. chúng tôi đã thấy cách thiết lập job mỗi phút.

schedule.every().hour.at(':00').do(crawl)
schedule.every().hour.at(':30').do(crawl)

while True:
    schedule.run_pending()
    time.sleep(1)
5

Chúng tôi cũng có thể thiết lập nhiệm vụ để chạy vào những ngày nhất định trong tuần

schedule.every().hour.at(':00').do(crawl)
schedule.every().hour.at(':30').do(crawl)

while True:
    schedule.run_pending()
    time.sleep(1)
6

Một điều quan trọng cần xem xét là mỗi khi chúng tôi đặt ra giới hạn thời gian, chúng tôi sẽ hủy bỏ giới hạn trước đó

schedule.every().hour.at(':00').do(crawl)
schedule.every().hour.at(':30').do(crawl)

while True:
    schedule.run_pending()
    time.sleep(1)
7

Trừ khi, chúng tôi thêm lịch biểu vào lịch trước đó

schedule.every().hour.at(':00').do(crawl)
schedule.every().hour.at(':30').do(crawl)

while True:
    schedule.run_pending()
    time.sleep(1)
8

10. Enabling and Disabling a Job

Để bật job:

schedule.every().hour.at(':00').do(crawl)
schedule.every().hour.at(':30').do(crawl)

while True:
    schedule.run_pending()
    time.sleep(1)
9

Để tắt job:

Minute Hour Day Month Day_of_the_Week  

┌───────────── minute (0 - 59)
│ ┌───────────── hour (0 - 23) 
│ │ ┌───────────── day of month (1 - 31)
│ │ │ ┌───────────── month (1 - 12)
│ │ │ │ ┌───────────── day of week (0 - 6) (Sunday to Saturday;
│ │ │ │ │                                       7 is also Sunday on some systems)
│ │ │ │ │
│ │ │ │ │
* * * * *  command to execute
0

#11. Kiểm tra hiệu lực và tìm kiếm xác thực

Minute Hour Day Month Day_of_the_Week  

┌───────────── minute (0 - 59)
│ ┌───────────── hour (0 - 23) 
│ │ ┌───────────── day of month (1 - 31)
│ │ │ ┌───────────── month (1 - 12)
│ │ │ │ ┌───────────── day of week (0 - 6) (Sunday to Saturday;
│ │ │ │ │                                       7 is also Sunday on some systems)
│ │ │ │ │
│ │ │ │ │
* * * * *  command to execute
1

Tìm kiếm :

Minute Hour Day Month Day_of_the_Week  

┌───────────── minute (0 - 59)
│ ┌───────────── hour (0 - 23) 
│ │ ┌───────────── day of month (1 - 31)
│ │ │ ┌───────────── month (1 - 12)
│ │ │ │ ┌───────────── day of week (0 - 6) (Sunday to Saturday;
│ │ │ │ │                                       7 is also Sunday on some systems)
│ │ │ │ │
│ │ │ │ │
* * * * *  command to execute
2

nguồn: http://stackabuse.com/scheduling-jobs-with-python-crontab/,

https://code.tutsplus.com/tutorials/managing-cron-jobs-using-python--cms-28231