Kahibaro
Discord Login Register

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

ایدهٔ کلی زمان‌بندی اسکریپت‌ها

گاهی می‌خواهید یک اسکریپت پایتون:

به جای این‌که خودتان هر بار به‌صورت دستی اسکریپت را اجرا کنید، می‌توانید اجرای آن را «زمان‌بندی» کنید تا سیستم به‌طور خودکار، طبق برنامهٔ شما آن را اجرا کند.

در این بخش، با چند روش رایج برای زمان‌بندی اسکریپت‌های پایتون آشنا می‌شوید:

در این فصل، فرض می‌کنیم شما بلد هستید یک اسکریپت پایتون بسازید و در ترمینال/کامندپرومت آن را اجرا کنید (مطالب این‌ها در فصل‌های قبلی آمده‌اند).


آماده‌سازی اسکریپت برای زمان‌بندی

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

یک مثال ساده از اسکریپت که فقط تاریخ و زمان فعلی را در یک فایل می‌نویسد:

import datetime
def log_time():
    now = datetime.datetime.now()
    with open("log.txt", "a", encoding="utf-8") as f:
        f.write(f"اجرا در: {now}\n")
if __name__ == "__main__":
    log_time()

حالا هدف ما این است که این فایل، مثلاً log_time.py، طبق برنامهٔ زمانی مشخص اجرا شود.


زمان‌بندی اسکریپت در ویندوز با Task Scheduler

در ویندوز، ابزار اصلی زمان‌بندی، Task Scheduler است. ایدهٔ کار:

  1. یک «وظیفه» (Task) جدید می‌سازید.
  2. مشخص می‌کنید چه زمانی و هر چند وقت یک‌بار اجرا شود.
  3. می‌گویید که این وظیفه، پایتون را با یک اسکریپت خاص اجرا کند.

پیدا کردن مسیر پایتون و اسکریپت

۱. در ترمینال (Command Prompt یا PowerShell) بنویسید:

where python

خروجی چیزی شبیه این است:

C:\Users\YourName\AppData\Local\Programs\Python\Python312\python.exe

این مسیر را بعداً در Task Scheduler نیاز دارید.

۲. مسیر کامل اسکریپت را هم بدانید، مثلاً:

C:\Users\YourName\projects\log_time.py

ساختن یک Task ساده (خلاصهٔ مراحل)

۱. در منوی Start عبارت Task Scheduler را جست‌وجو و آن را باز کنید.
۲. از سمت راست، روی «Create Basic Task…» کلیک کنید.
۳. یک نام ساده بدهید، مثلاً: LogTimeEveryDay.
۴. در مرحلهٔ Trigger:

  1. در مرحلهٔ Action، گزینهٔ Start a program را انتخاب کنید.
  2. حالا:
    • در Program/script مسیر python.exe را وارد کنید، مثلاً:
      C:\Users\YourName\AppData\Local\Programs\Python\Python312\python.exe
    • در Add arguments (optional) نام اسکریپت را بنویسید:
      C:\Users\YourName\projects\log_time.py
    • در Start in (optional) پوشهٔ اسکریپت را بدون نام فایل بنویسید:
      C:\Users\YourName\projects
  3. Finish را بزنید.

از این به بعد، ویندوز در زمان تعیین‌شده، اسکریپت شما را اجرا می‌کند.

نکته‌های مهم در ویندوز

زمان‌بندی اسکریپت در لینوکس و macOS با cron

در سیستم‌عامل‌های شبه‌یونیکس (لینوکس و اغلب macOS)، ابزار کلاسیک برای زمان‌بندی، cron است.

ساختن یک دستور cron

هر کاربر می‌تواند یک «فایل زمان‌بندی» به نام crontab داشته باشد. برای ویرایش آن:

crontab -e

برای اولین‌بار ممکن است از شما بپرسد با کدام ویرایشگر (مثلاً nano)، آن را باز کند.

در این فایل، خط‌هایی به شکل زیر می‌نویسید:

* * * * *  دستور

پنج ستون اول زمان را مشخص می‌کند:

  1. دقیقه (۰ تا ۵۹)
  2. ساعت (۰ تا ۲۳)
  3. روز ماه (۱ تا ۳۱)
  4. ماه (۱ تا ۱۲)
  5. روز هفته (۰ تا ۷، معمولاً ۰ و ۷ هر دو به معنای یکشنبه)

سپس، دستور کامل اجرا می‌شود؛ مثلاً اجرای پایتون روی اسکریپت شما.

برای مثال، اگر مسیر پایتون و اسکریپت این‌ها باشند:

مثال ۱: اجرا هر روز ساعت ۱۰ صبح

0 10 * * * /usr/bin/python3 /home/user/projects/log_time.py

مثال ۲: اجرا هر ۵ دقیقه

*/5 * * * * /usr/bin/python3 /home/user/projects/log_time.py

مثال ۳: اجرا یک‌بار در ماه، روز اول، ساعت ۳ شب

0 3 1 * * /usr/bin/python3 /home/user/projects/log_time.py

بعد از ذخیره و خروج از ویرایشگر، cron به‌طور خودکار از این تنظیمات استفاده می‌کند.

نکته‌های مهم در cron

crontab -l
crontab -r

زمان‌بندی داخل خود پایتون (حلقه + sleep)

اگر نمی‌خواهید از ابزار سیستم‌عامل استفاده کنید، می‌توانید «داخل خود اسکریپت» یک زمان‌بندی ساده بسازید. محدودیت مهم این روش:
اسکریپت باید همیشه در حال اجرا بماند (مثلاً روی یک سرور یا سیستم روشن).

استفاده از `time.sleep`

مثال: اجرای یک کار هر ۱۰ ثانیه:

import time
import datetime
def job():
    now = datetime.datetime.now()
    print(f"کار اجرا شد در: {now}")
while True:
    job()
    time.sleep(10)  # مکث ۱۰ ثانیه

ایده:

زمان‌بندی سادهٔ روزانه (تقریبی)

مثلاً می‌خواهید هر روز حدود ساعت ۱۰ صبح کار انجام شود. یک نسخهٔ ساده (نه‌چندان دقیق، ولی کاربردی):

import time
import datetime
def do_daily_task():
    now = datetime.datetime.now()
    print(f"کار روزانه اجرا شد در: {now}")
while True:
    now = datetime.datetime.now()
    if now.hour == 10 and now.minute == 0:
        do_daily_task()
        time.sleep(60)  # برای جلوگیری از اجرای چندباره در همان دقیقه
    else:
        time.sleep(20)  # هر ۲۰ ثانیه یک‌بار بررسی کند

این روش برای کارهای خانگی ساده بد نیست، ولی برای زمان‌بندی جدی، استفاده از ابزار سیستم‌عامل یا کتابخانه‌های مخصوص بهتر است.


آشنایی مقدماتی با کتابخانه‌های زمان‌بندی در پایتون

کتابخانه‌هایی وجود دارند که مدیریت زمان‌بندی را راحت‌تر می‌کنند. یکی از ساده‌ترین‌ها، ماژول schedule است (خارجی است و با pip نصب می‌شود).

نصب و استفادهٔ خیلی خلاصه از `schedule`

نصب (در ترمینال):

pip install schedule

نمونهٔ استفاده:

import schedule
import time
def job():
    print("سلام! این کار هر دقیقه اجرا می‌شود.")
# تعریف برنامهٔ زمانی
schedule.every(1).minutes.do(job)
while True:
    schedule.run_pending()  # کارهایی که نوبتشان شده را اجرا کن
    time.sleep(1)

ایده:

این روش برای برنامه‌های در حال اجرا (مثل سرویس‌ها) مناسب است، اما همچنان نیاز دارد برنامه در حال اجرا بماند.


تست و عیب‌یابی زمان‌بندی

چه از Task Scheduler استفاده کنید، چه از cron، چه از روش‌های داخل پایتون، چند نکتهٔ مهم برای تست:

  1. ابتدا اسکریپت را دستی اجرا کنید.
    مطمئن شوید بدون خطا کار می‌کند.
  2. در اسکریپت، لاگ بنویسید.
    مثلاً در هر اجرا، زمان را در یک فایل ثبت کنید تا ببینید آیا در زمان درست اجرا شده است یا نه.
with open("log.txt", "a", encoding="utf-8") as f:
    f.write("اسکریپت اجرا شد.\n")
  1. برای تست، فاصلهٔ زمانی را کوتاه بگیرید.
    مثلاً به‌جای روزانه، برای چند دقیقهٔ آینده تنظیم کنید تا مجبور نشوید یک روز صبر کنید.
  2. پیام‌های خطا را بررسی کنید.
    • در ویندوز: در Task Scheduler، تاریخچه (History) و تب‌های مختلف Task را ببینید.
    • در لینوکس/macOS: ممکن است خروجی خطا را در mail کاربر یا در لاگ سیستم ببینید (این بسته به تنظیمات سیستم است). اگر می‌خواهید خروجی را در فایل داشته باشید، در دستور cron این‌طور بنویسید:
0 10 * * * /usr/bin/python3 /home/user/projects/log_time.py >> /home/user/projects/cron.log 2>&1

(این دستور خروجی استاندارد و خطا را در cron.log می‌نویسد.)


انتخاب روش مناسب

خلاصه:

در فصل‌های دیگر، یاد می‌گیرید چطور اسکریپت‌های کاربردی‌تر بسازید؛ در این فصل دیدید که چطور آن‌ها را در زمان‌های مشخص به‌طور خودکار اجرا کنید تا خودکارسازی شما یک قدم حرفه‌ای‌تر شود.

Views: 9

Comments

Please login to add a comment.

Don't have an account? Register now!