از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
برنامه ریزی مشاغل با python-crontab
سرفصلهای مطلب
چیست 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 همچنین کاراکترهای ویژه را می پذیرد تا بتوانید برنامه های زمانی پیچیده تری ایجاد کنید. کاراکترهای خاص معانی زیر را دارند:
شخصیت | معنی |
---|---|
کاما | برای جدا کردن چندین مقدار |
خط ربط | برای نشان دادن محدوده ای از مقادیر |
ستاره | برای نشان دادن تمام مقادیر ممکن |
اسلش رو به جلو | برای نشان دادن هر |
بیایید چند نمونه را ببینیم:
* * * * *
یعنی: هر دقیقه از هر ساعت از هر روز ماه برای هر ماه برای هر روز هفته.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 روی” با اضافه شدن تاریخ و زمان دسترسی.
نتیجه به شرح زیر است:
شکل 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
زمینه های.
مثال ها:
job.every(2).month
برابر است با0 0 0 */2 *
وjob.month.every(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
ماژول همچنین به ما اجازه می دهد تا بر اساس وظایف جستجو کنیم روی یک معیار انتخاب، که می تواند بر اساس آن باشد روی یک دستور، یک نظر، یا یک زمان برنامه ریزی شده. نحو برای هر مورد متفاوت است.
مطابق دستور پیدا کنید:
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