وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

برنامه ریزی مشاغل با python-crontab

0 31
زمان لازم برای مطالعه: 8 دقیقه


چیست Crontab

Cron یک ابزار نرم افزاری است که به ما امکان می دهد وظایف را زمان بندی کنیم روی سیستم های یونیکس مانند این نام از کلمه یونانی “Chronos” به معنای “زمان” گرفته شده است.

وظایف در کرون در الف تعریف شده اند crontab، که یک فایل متنی حاوی دستوراتی است که باید اجرا شوند. نحو استفاده شده در a crontab در زیر در این مقاله توضیح داده شده است.

پایتون به ما ارائه می دهد crontab ماژول برای مدیریت کارهای برنامه ریزی شده از طریق Cron. توابع موجود در آن به ما امکان دسترسی به Cron، ایجاد شغل، تعیین محدودیت، حذف مشاغل و موارد دیگر را می دهد. در این مقاله روش استفاده از این عملیات را از داخل کد پایتون نشان خواهیم داد.

برای خواننده علاقه مند، کمک رسمی page را می توان در یافت https://pypi.python.org/pypi/python-crontab.

Crontab نحو

Cron از یک نحو خاص برای تعریف برنامه های زمانی استفاده می کند. از پنج فیلد تشکیل شده است که با فاصله های سفید از هم جدا شده اند. زمینه ها عبارتند از:

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 روی some systems)
│ │ │ │ │
│ │ │ │ │
* * * * *  command to execute

Source: ویکیپدیا. کرون موجود در https://en.wikipedia.org/wiki/Cron

Cron همچنین کاراکترهای ویژه را می پذیرد تا بتوانید برنامه های زمانی پیچیده تری ایجاد کنید. کاراکترهای خاص معانی زیر را دارند:

شخصیت معنی
کاما برای جدا کردن چندین مقدار
خط ربط برای نشان دادن محدوده ای از مقادیر
ستاره برای نشان دادن تمام مقادیر ممکن
اسلش رو به جلو برای نشان دادن هر

بیایید چند نمونه را ببینیم:

  1. * * * * * یعنی: هر دقیقه از هر ساعت از هر روز ماه برای هر ماه برای هر روز هفته.
  2. 0 16 1,10,22 * * به cron می‌گوید که یک کار را در ساعت 4 بعد از ظهر (که ساعت 16 است) اجرا کند. روی روز های 1، 10 و 22 هر ماه.

در حال نصب Crontab

Crontab در نصب استاندارد پایتون گنجانده نشده است. بنابراین، اولین کاری که باید انجام دهیم این است که آن را نصب کنیم.

این کار با pip فرمان تنها چیزی که باید در نظر گرفت این است که نام ماژول است python-crontab، و نه فقط “crontab”. دستور زیر بسته را در دستگاه ما نصب می کند:

$ pip install python-crontab

دسترسی به Crontab

بر اساس crontab کمک page، پنج راه برای گنجاندن شغل در آن وجود دارد cron. از آنها، سه کار می کنند روی فقط لینوکس، و دو مورد نیز قابل استفاده است روی پنجره ها.

اولین راه دسترسی cron با استفاده از نام کاربری است. نحو به شرح زیر است:

cron = CronTab(user='username')

دو روش دیگر لینوکس عبارتند از:

cron = CronTab()



cron = CronTab(user=True)

دو نحو دیگر نیز وجود دارد که کار خواهند کرد روی پنجره ها.

در مورد اول، یک وظیفه تعریف شده در فایل را فراخوانی می کنیم filename.tab:

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

در مورد دوم، وظیفه را بر اساس تعریف می کنیم cronنحو:

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

ایجاد یک شغل جدید

زمانی که ما دسترسی پیدا کردیم cron، می توانیم با استفاده از دستور زیر یک کار جدید ایجاد کنیم:

cron.new(command='my command')

اینجا، my command وظیفه ای را که باید از طریق خط فرمان اجرا شود را مشخص می کند.

ما همچنین می توانیم یک نظر به وظیفه خود اضافه کنیم. نحو به شرح زیر است:

cron.new(command='my command', comment='my comment')

بیایید این را در یک مثال ببینیم:

from crontab import CronTab

cron = CronTab(user='username')
job = cron.new(command='python example1.py')
job.minute.every(1)

cron.write()

در کد بالا ابتدا به آن دسترسی پیدا کرده ایم cron از طریق نام کاربری، و سپس کاری ایجاد کرد که شامل اجرای یک اسکریپت پایتون به نام است example1.py. علاوه بر این، ما این وظیفه را قرار داده ایم که هر 1 دقیقه اجرا شود. این write() تابع کار ما را به آن اضافه می کند cron.

این example1.py اسکریپت به شرح زیر است:

from datetime import datetime
myFile = open('append.txt', 'a') 
myFile.write('\nAccessed روی ' + str(datetime.now()))

همانطور که از کد بالا می بینیم، برنامه باز می شود و عبارت “Accessed روی” با اضافه شدن تاریخ و زمان دسترسی.

پیشنهاد می‌کنیم بخوانید:  روش استفاده از LangChain و GPT برای تجزیه و تحلیل چندین سند

نتیجه به شرح زیر است:

فایل append.txt

شکل 1

همانطور که انتظار داشتیم، شکل 1 نشان می دهد که برنامه به فایل دسترسی داشته است. در حالی که به انجام وظیفه اختصاص داده شده ادامه خواهد داد example1.py برنامه در حال اجراست روی cron.

یک بار cron قابل دسترسی است، می توانیم بیش از یک کار اضافه کنیم. به عنوان مثال، خط زیر در مثال بالا یک کار دوم را اضافه می کند که توسط آن مدیریت می شود cron:

job2 = cron.new(command='python example2.py')

هنگامی که یک کار جدید اضافه می شود، می توانیم برای هر یک از آنها محدودیت هایی تعیین کنیم.

تنظیم محدودیت ها

یکی از مزایای اصلی استفاده از پایتون crontab ماژول این است که ما می توانیم محدودیت های زمانی را بدون نیاز به استفاده تنظیم کنیم cronنحو.

در مثال بالا قبلاً روش تنظیم اجرای هر دقیقه کار را دیده ایم. نحو به شرح زیر است:

job.minute.every(minutes)

به طور مشابه می توانیم ساعت ها را تنظیم کنیم:

job.hour.every(hours)

ما همچنین می توانیم وظیفه را برای اجرا تنظیم کنیم روی روزهای خاصی از هفته مثلا:

job.dow.روی('SUN')

کد بالا نشان می دهد cron برای اجرای کار روی یکشنبه ها، و کد زیر نشان می دهد cron برای برنامه ریزی کار روی یکشنبه ها و جمعه ها:

job.dow.روی('SUN', 'FRI')

به طور مشابه، ما می توانیم بگوییم cron برای اجرای کار در ماه های خاص. مثلا:

job.month.during('APR', 'NOV')

این خواهد گفت cron برای اجرای برنامه در ماه های فروردین و آبان.

نکته مهمی که باید در نظر گرفت این است که هر بار که محدودیت زمانی تعیین می کنیم، محدودیت قبلی را باطل می کنیم. بنابراین، برای مثال:

job.hour.every(5)
job.hour.every(7)

کد بالا برنامه نهایی را به گونه ای تنظیم می کند که هر هفت ساعت اجرا شود و برنامه پنج ساعته قبلی لغو شود.

مگر اینکه، یک برنامه زمانی را به برنامه قبلی اضافه کنیم، مانند این:

job.hour.every(15)
job.hour.also.روی(3)

این برنامه را هر 15 ساعت تنظیم می کند، و در ساعت 3 صبح

“هر” شرایط ممکن است گاهی اوقات کمی گیج کننده باشد. اگر بنویسیم job.hour.every(15)، این معادل خواهد بود * */15 * * *. همانطور که می بینیم صورتجلسه اصلاح نشده است.

اگر بخواهیم فیلد دقیقه را صفر کنیم، می توانیم از دستور زیر استفاده کنیم:

job.every(15).hours()

این برنامه زمان بندی را تنظیم می کند 0 */4 * * *. به طور مشابه برای day of the month، month و day of the week زمینه های.

مثال ها:

  1. job.every(2).month برابر است با 0 0 0 */2 * و job.month.every(2) برابر است با * * * */2 *
  2. job.every(2).dows برابر است با 0 0 * * */2 و job.dows.every(2) برابر است با * * * * */2

ما می توانیم تفاوت ها را در مثال زیر مشاهده کنیم:

from crontab import CronTab

cron = CronTab(user='username')

job1 = cron.new(command='python example1.py')

job1.hour.every(2)

job2 = cron.new(command='python example1.py')
job2.every(2).hours()

for item in cron:
    print item

cron.write()

پس از اجرای برنامه، نتیجه به شرح زیر است:

$ python cron2.py
* */2 * * * python /home/eca/cron/example1.py
0 */2 * * * python /home/eca/cron/example1.py
$

شکل 2

همانطور که می بینیم در شکل 2، برنامه دقیقه کار دوم را صفر کرده است و دقیقه کار اول را به مقدار پیش فرض آن تعریف کرده است.

در نهایت، می‌توانیم هر بار که دستگاه خود را راه‌اندازی می‌کنیم، این وظیفه را تنظیم کنیم. نحو به شرح زیر است:

job.every_reboot()

پاکسازی محدودیت ها

با دستور زیر می توانیم تمام محدودیت های task را پاک کنیم:

job.clear()

کد زیر روش استفاده از دستور بالا را نشان می دهد:

from crontab import CronTab

cron = CronTab(user='username')

job = cron.new(command='python example1.py', comment='comment')
job.minute.every(5)

for item in cron:
    print item

job.clear()

for item in cron:
    print item
cron.write()

پس از اجرای کد به نتیجه زیر می رسیم:

$ python cron3.py
*/5 * * * * python /home/eca/cron/example1.py 
* * * * * python /home/eca/cron/example1.py 

شکل 3

همانطور که می بینیم در شکل 3، برنامه از هر 5 دقیقه به تنظیمات پیش فرض تغییر کرده است.

فعال و غیرفعال کردن یک کار

یک کار را می توان با استفاده از دستورات زیر فعال یا غیرفعال کرد:

برای فعال کردن یک شغل:

job.enable()

برای غیرفعال کردن یک شغل:

job.enable(False)

برای بررسی فعال یا غیرفعال بودن یک کار، می‌توانیم از دستور زیر استفاده کنیم:

job.is_enabled()

مثال زیر روش فعال و غیرفعال کردن یک کار از قبل ایجاد شده را نشان می دهد و هر دو حالت را تأیید می کند:

from crontab import CronTab

cron = CronTab(user='username')

job = cron.new(command='python example1.py', comment='comment')
job.minute.every(1)

cron.write()

print job.enable()
print job.enable(False)

نتیجه به شرح زیر است:

$ python cron4.py
True
False

شکل 4

بررسی اعتبار

با دستور زیر می توانیم به راحتی بررسی کنیم که آیا یک کار معتبر است یا نه:

job.is_valid()

مثال زیر روش استفاده از این دستور را نشان می دهد:

from crontab import CronTab

cron = CronTab(user='username')

job = cron.new(command='python example1.py', comment='comment')
job.minute.every(1)

cron.write()

print job.is_valid()

پس از اجرای برنامه فوق، اعتبار سنجی را مانند شکل زیر بدست می آوریم:

$ python cron5.py
True

شکل 5

فهرست کردن همه مشاغل Cron

همه cron مشاغل، از جمله مشاغل غیر فعال را می توان با کد زیر فهرست کرد:

for job in cron:
    print job

افزودن آن خطوط کد به اولین مثال ما وظیفه ما را با چاپ نشان می دهد روی صفحه نمایش زیر است:

$ python cron6.py
* * * * * python /home/eca/cron/example1.py

شکل 6

پیدا کردن یک شغل

پایتون crontab ماژول همچنین به ما اجازه می دهد تا بر اساس وظایف جستجو کنیم روی یک معیار انتخاب، که می تواند بر اساس آن باشد روی یک دستور، یک نظر، یا یک زمان برنامه ریزی شده. نحو برای هر مورد متفاوت است.

پیشنهاد می‌کنیم بخوانید:  Git Change Commit Message – نحوه ویرایش پیام های Commit با Git Amend

مطابق دستور پیدا کنید:

cron.find_command("command name")

در اینجا “نام فرمان” می تواند یک تطابق فرعی یا یک عبارت منظم باشد.

پیدا کردن بر اساس نظر:

cron.find_comment("comment")

بر اساس زمان پیدا کنید:

cron.find_time(time schedule)

مثال زیر نشان می دهد که چگونه می توان یک وظیفه از قبل تعریف شده را با توجه به سه معیاری که قبلا ذکر شد پیدا کرد:

from crontab import CronTab

cron = CronTab(user='username')

job = cron.new(command='python example1.py', comment='comment')
job.minute.every(1)

cron.write()

iter1 = cron.find_command('exam')
iter2 = cron.find_comment('comment')
iter3 = cron.find_time("*/1 * * * *")

for item1 in iter1:
    print item1

for item2 in iter2:
    print item2

for item3 in iter3:
    print item3

نتیجه این است که یک شغل سه بار فهرست می شود:

$ python cron7.py
* * * * * python /home/eca/cron/example1.py 
* * * * * python /home/eca/cron/example1.py 
* * * * * python /home/eca/cron/example1.py 

شکل 7

همانطور که می بینید، آن را به درستی پیدا می کند cron هر بار دستور دهید

حذف مشاغل

هر کار را می توان به طور جداگانه حذف کرد. نحو به شرح زیر است:

cron.remove(job)

کد زیر روش حذف وظیفه ای که قبلا ایجاد شده را نشان می دهد. برنامه ابتدا وظیفه را ایجاد می کند. سپس، تمام وظایف را فهرست می‌کند و تکلیف ایجاد شده را نشان می‌دهد. پس از این، وظیفه را حذف می کند و لیست خالی حاصل را نشان می دهد.

from crontab import CronTab

cron = CronTab(user='username')

job = cron.new(command='python example1.py')
job.minute.every(1)

cron.write()
print "Job created"


for job in cron:
    print job

cron.remove(job)
print "Job removed"


for job in cron:
    print job

نتیجه به شرح زیر است:

$ python cron8.py
Job created
* * * * * python /home/eca/cron/example1.py
Job removed

شکل 8

مشاغل همچنین می توانند بر اساس حذف شوند روی یک شرط مثلا:

cron.remove_all(comment='my comment')

با این کار همه مشاغلی که در آن قرار دارند حذف می شوند comment='my comment'.

پاکسازی همه مشاغل

همه cron با استفاده از دستور زیر می‌توان کارها را به یکباره حذف کرد:

cron.remove_all()

مثال زیر همه را حذف می کند cron مشاغل و نمایش یک لیست خالی.

from crontab import CronTab

cron = CronTab(user='username')
cron.remove_all()


for job in cron:
    print job

متغیرهای محیطی

همچنین می‌توانیم متغیرهای محیطی را مختص کار برنامه‌ریزی‌شده خود تعریف کنیم و آنها را نشان دهیم روی صفحه نمایش متغیرها در یک فرهنگ لغت ذخیره می شوند. سینتکس برای تعریف یک متغیر محیطی جدید به شرح زیر است:

job.env('VARIABLE_NAME') = 'Value'

اگر بخواهیم مقادیر همه متغیرهای محیطی را بدست آوریم، می توانیم از نحو زیر استفاده کنیم:

job.env

مثال زیر دو متغیر محیطی جدید را برای وظیفه ‘user’ تعریف می کند و مقدار آنها را نشان می دهد روی صفحه نمایش کد به شرح زیر است:

from crontab import CronTab

cron = CronTab(user='username')

job = cron.new(command='python example1.py')
job.minute.every(1)
job.env('MY_ENV1') = 'A'
job.env('MY_ENV2') = 'B'

cron.write()

print job.env

پس از اجرای برنامه فوق به نتیجه زیر می رسیم:

$ python cron9.py
MY_ENV1=A
MY_ENV2=B

شکل 9

علاوه بر این، متغیرهای محیطی سطح Cron در آن ذخیره می‌شوند cron.env.

بسته بندی

ماژول پایتون crontab ابزاری مفید برای مدیریت برنامه نویسی ما در اختیار ما قرار می دهد cron برنامه ای که برای سیستم های شبه یونیکس در دسترس است. با استفاده از آن، به جای نیاز به تکیه کردن روی پدید آوردن crontabs، می توانیم از کد پایتون برای مدیریت وظایف مکرر استفاده کنیم.

ماژول کاملاً کامل است. اگرچه انتقاداتی در مورد رفتار آن وجود دارد، اما دارای عملکردهایی برای اتصال است cron، وظایف برنامه ریزی شده را ایجاد کنید و آنها را مدیریت کنید. همانطور که در مثال های بالا نشان داده شده است، استفاده از آنها کاملا مستقیم است. بنابراین، ابزاری را فراهم می‌کند که به اسکریپت‌های پیچیده با ویژگی اصلی پایتون اجازه می‌دهد: سادگی.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-28 15:29:04

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید