جدول محتوایی

در تلاش‌هایمان برای آوردن آن نکات کوچکی که شما را از دیگران متمایز می‌کند، در اینجا چند روش جایگزین برای برنامه‌ریزی یک کار بدون استفاده از ابزار cron در لینوکس ارائه کرده‌ایم.

زمانبندی یک کار/فرمان در لینوکس مخفف cron است. هر زمان که نیاز به برنامه ریزی کاری داشته باشیم، دستور cron را صدا می زنیم، اما آیا می دانید که می توانیم یک کار را بعداً بدون cron برنامه ریزی کنیم؟ می توانید با استفاده از روش های رایج زیر این کار را انجام دهید.

1. زمانبندی کارها در لینوکس با استفاده از Sleep Loop

هر 5 ثانیه یک دستور (مثلا تاریخ) را اجرا کنید و خروجی را در یک فایل بنویسید (مثلا date.txt). برای رسیدن به این سناریو، باید اسکریپت تک خطی زیر را مستقیماً در خط فرمان اجرا کنیم.

$ while true; do date >> date.txt ; sleep 5 ; done &

آناتومی اسکریپت یک خطی فوق:

  • while true: از اسکریپت بخواهید تا زمانی که شرط درست است اجرا شود، به عنوان یک حلقه عمل می کند که باعث می شود دستور بارها و بارها اجرا شود یا در یک حلقه گفته شود.
  • do: آنچه را که در ادامه می آید انجام دهید، یعنی دستور یا مجموعه ای از دستورات را که قبل از دستور do قرار دارد، اجرا کنید.
  • date >> date.txt: در اینجا خروجی دستور date در یک فایل date.txt نوشته می شود. همچنین توجه داشته باشید که ما از >> و نه > استفاده کرده ایم.
  • >>: تضمین می کند که فایل (date.txt) هر بار که اسکریپت اجرا می شود بازنویسی نمی شود. فقط تغییرات را اضافه می کند. در حالی که > فایل را دوباره و دوباره بازنویسی کنید.
  • sleep 5: از پوسته می خواهد قبل از اجرای مجدد، اختلاف زمانی 5 ثانیه را حفظ کند. توجه داشته باشید که زمان در اینجا همیشه بر حسب ثانیه اندازه گیری می شود. بگویید اگر می خواهید دستور را هر 6 دقیقه اجرا کنید، باید از 360 (6*60) در خواب متوالی استفاده کنید.
  • done: پایان یک حلقه while را نشان می دهد.
  • &: کل فرآیند را در یک حلقه در پس زمینه قرار دهید.

به طور مشابه، ما می‌توانیم هر اسکریپتی را به همان شیوه اجرا کنیم. در اینجا دستور فراخوانی یک اسکریپت پس از یک بازه زمانی مشخص (مثلاً 100 ثانیه) و نام اسکریپت script_name.sh است.

همچنین شایان ذکر است که اسکریپت بالا باید در دایرکتوری اجرا شود که در آن اسکریپت نامیده می شود، در غیر این صورت باید یک مسیر کامل (/home/$USER/…/script_name.sh) ارائه دهید.

نحو برای فراخوانی اسکریپت در بازه زمانی فوق به شرح زیر است:

$ while true; do /bin/sh script_name.sh ; sleep 100 ; done &

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

با این حال، اگر بخواهیم موارد تست یا بنچمارک های ورودی/خروجی خاصی را اجرا کنیم، دستور تکی بالا به این هدف عمل می کند.

2. وظایف را با تایمرهای Systemd زمان بندی کنید

در اکثر توزیع‌های مدرن لینوکس، Systemd سیستم اولیه پیش‌فرض است و دارای قابلیت تایمر است که به شما امکان می‌دهد وظایف خود را زمان‌بندی کنید.

ابتدا یک فایل unit timer systemd جدید با پسوند .timer مطابق شکل ایجاد کنید.

$ sudo nano /etc/systemd/system/myjob.timer

محتوای زیر را به فایل myjob.timer اضافه کنید:

[Unit]
Description=My Job Timer

[Timer]
OnCalendar=*-*-* 00:00:00
# Replace the OnCalendar value with the desired schedule

[Install]
WantedBy=timers.target

فیلد OnCalendar در یک واحد تایمر systemd به شما امکان می دهد با استفاده از یک فرمت خاص، برنامه زمان بندی کار خود را مشخص کنید.

  • Yearly: سالانه
  • Monthly: ماهانه
  • Weekly: هفتگی
  • Daily: روزانه
  • Hourly: ساعتی
  • Minutes: می توانید یک دقیقه خاص را با استفاده از قالب *:MM (به عنوان مثال *:15 برای هر 15 دقیقه) یا یک محدوده خاص با استفاده از MM-MM (مثلاً 10-30 برای هر دقیقه از 10 تا 30) مشخص کنید.

در اینجا چند مثال برای نشان دادن قالب آورده شده است:

## Run every day at 3:00 AM ##
OnCalendar=*-*-* 03:00:00

## Run every Monday and Friday at 10:00 AM ##
OnCalendar=Mon,Fri *-*-* 10:00:00

## Run every 30 minutes: ##
OnCalendar=*-*-* *:0/30:00

سپس، یک فایل واحد خدمات مربوطه با پسوند .service در همان فهرست ایجاد کنید:

$ sudo nano /etc/systemd/system/myjob.service

محتوای زیر را به فایل myjob.service اضافه کنید:

[Unit]
Description=My Job

[Service]
ExecStart=/path/to/your/job.sh
# Replace "/path/to/your/job.sh" with the actual command or script to execute

[Install]
WantedBy=multi-user.target

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

$ sudo systemctl enable myjob.timer
$ sudo systemctl start myjob.timer

این کار شما را بر اساس تایمر مشخص شده برنامه ریزی می کند.

3. برنامه ریزی وظایف با استفاده از Anacron

Anacron یک زمان‌بندی کار مبتنی بر زمان است که به شما امکان می‌دهد کارها را به صورت دوره‌ای در سیستم‌هایی که همیشه روشن نیستند، زمان‌بندی کنید. برای سیستم هایی طراحی شده است که ممکن است دسترسی منظم به cron نداشته باشند. اگر anacron روی سیستم شما نصب شده باشد، می توانید از آن برای برنامه ریزی کار خود استفاده کنید.

اگر نصب نیست، می توانید آن را با استفاده از مدیریت بسته خود نصب کنید.

$ sudo apt install anacron         [On Debian, Ubuntu and Mint]
$ sudo yum install anacron         [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
$ sudo emerge -a sys-apps/anacron  [On Gentoo Linux]
$ sudo apk add anacron             [On Alpine Linux]
$ sudo pacman -S anacron           [On Arch Linux]
$ sudo zypper install anacron      [On OpenSUSE]

یک فایل پیکربندی جدید (myjob.sh) برای کار خود در پوشه /etc/anacrontab.d/ ایجاد کنید.

$ sudo nano /etc/anacrontab.d/myjob.sh

در فایل تنظیمات، جزئیات کار خود را مشخص کنید.

# Run myjob.sh every day with a delay of 5 minutes
1 5 myjob /path/to/myjob.sh

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

  • اولین فیلد دوره زمانی است که در آن کار باید @daily، @weekly، @monthly یا @yearly اجرا شود.
  • فیلد دوم زمان بر حسب دقیقه برای به تاخیر انداختن اجرای کار پس از راه اندازی سیستم است.
  • فیلد سوم نام شغل است که برای ایجاد فایل های گزارش استفاده می شود.
  • قسمت چهارم فرمان یا اسکریپتی است که باید اجرا شود.

اکنون آناکرون به طور خودکار کار شما را طبق برنامه زمانی مشخص شده اجرا می کند.

در حال حاضر تمام اینها است، اگر چنین هک یا ترفندهای لینوکس را می شناسید، می توانید آنها را از طریق بخش نظرات ما با ما به اشتراک بگذارید، و فراموش نکنید که این مقاله را با دوستان خود به اشتراک بگذارید.

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

10رای - امتیاز 5 ممنون از امتیازی که دادید..!

دسته بندی شده در: