آموزش دستور at در لینوکس، اجرای خودکار وظایف بدون Cron

  • دسته بندی ها: لینوکس

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

ابزار معروف Cron در لینوکس برای کارهای تکرارشونده و دوره‌ای طراحی شده است، اما پیکربندی آن برای اجرای یکباره کارها پیچیده و غیربهینه است. در این میان، دستور at به عنوان ابزاری سبک، ساده و بسیار قدرتمند وارد عمل می‌شود. این ابزار به شما اجازه می‌دهد تا برنامه‌ریزی کارهای یکباره را با منعطف‌ترین کلمات و فرمت‌های زمانی انجام دهید.

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

ابزار at در لینوکس چیست و چه تفاوتی با Cron دارد؟

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

تفاوت کلیدی دستور at  با Cron در ساختار تکرار آن‌ها نهفته است. Cron برای جاب‌های دوره‌ای و تکرارشونده مانند ایجاد فایل‌های بکاپ روزانه یا پاک‌سازی هفتگی لاگ‌های سرور طراحی شده است. در مقابل، دستور at فقط برای کارهای یک‌باره (One-time jobs) کاربرد دارد. زمانی که یک کار توسط at زمان‌بندی می‌شود، پس از رسیدن موعد مقرر و اجرای دستور، آن کار به طور کامل از صف سیستم پاک می‌شود و دیگر تکرار نخواهد شد.

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

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

در برخی از توزیع‌های لینوکس ممکن است ابزار at به صورت پیشفرض نصب نشده باشد. این ابزار از دو بخش اصلی تشکیل شده است که شامل ابزار خط فرمان at و daemon پس‌زمینه به نام atd می‌شود. برای بهره‌گیری از قابلیت‌های این ابزار، نصب کامل هر دو بخش الزامی است.

نصب دستور at در توزیع‌های دبیان

برای نصب این ابزار در توزیع‌های مبتنی بر Debian مانند اوبونتو، می‌توانید از مدیریت پکیج apt استفاده کنید. قبل از اقدام به نصب، بهتر است فهرست مخازن سیستم‌عامل خود را به‌روزرسانی کنید.

نصب دستور at در توزیع‌های ردهت

در توزیع‌های مبتنی بر RedHat مانند RHEL، CentOS، Rocky Linux و Fedora، نصب پکیج از طریق مدیریت پکیج dnf یا yum صورت می‌گیرد.

مدیریت و فعال‌سازی دمون atd با systemctl

ابزار at برای نظارت بر زمان و اجرای دستورها در پس‌زمینه به دیمن atd وابسته است. پس از اتمام مراحل نصب، باید وضعیت این سرویس را بررسی کرده و از فعال بودن آن مطمئن شوید.

برای بررسی وضعیت فعال بودن سرویس atd دستور زیر را اجرا کنید:

در صورتی که سرویس غیرفعال بود، می‌توانید با اجرای دستورهای زیر آن را فعال کرده و تنظیم کنید که با هر بار روشن شدن سیستم، به طور خودکار اجرا شود:

ساختار اصلی و نحوه نگارش دستور at

دستور at از ساختاری ساده اما بسیاز منعطف بهره می‌برد. نحوه کلی فراخوانی این دستور در خط فرمان به شکل زیر تعریف می‌شود:

زمانی که این دستور را به همراه زمان مورد نظر خود در ترمینال وارد کرده و کلید Enter را فشار می‌دهید، وارد یک محیط تعاملی به نام پرامپت at خواهید شد. این محیط تعاملی با نشانه <at مشخص می‌شود.

در این بخش می‌توانید یک یا چند دستور لینوکسی را تایپ کنید. هر دستور در یک خط جداگانه قرار می‌گیرد. پس از وارد کردن تمامی دستورهای مورد نظر، برای ذخیره‌سازی زمان‌بندی و خروج از محیط تعاملی باید کلیدهای ترکیبی Ctrl+D را فشار دهید. پس از خروج، پیام تایید زمان‌بندی به همراه شماره شناسه کار (Job ID) نمایش داده خواهد شد.

روش‌های زمان‌بندی در ابزار at به همراه مثال‌های کاربردی

یکی از ویژگی‌های جالب و قدرتمند ابزار at، قابلیت درک فرمت‌های مختلف و حتی زبان طبیعی انسان برای تعیین زمان است. شما می‌توانید زمان اجرای دستور را با روش‌های متنوعی به سیستم معرفی کنید.

زمان‌بندی با فرمت‌های دقیق ساعت و تاریخ

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

برای مثال برای اجرای دستور در ساعت ۱۰:۳۰ صبح می‌توانید از دستور زیر استفاده کنید:

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

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

یکی از راحت‌ترین روش‌های زمان‌بندی استفاده از عبارت‌های نسبی بر پایه زمان فعلی سیستم است. با استفاده از کلیدواژه now می‌توانید فواصل زمانی مشخصی را اضافه کنید.

برای زمان‌بندی کارهایی که باید چند دقیقه، ساعت، روز یا هفته دیگر اجرا شوند، عبارات زیر بسیار کاربردی هستند:

استفاده از کلمات کلیدی آماده در سیستم

ابزار at به صورت پیشفرض شامل یک سری کلمات کلیدی میان‌بر است که نقاط زمانی مشخصی از شبانه‌روز را نشان می‌دهند. این میان‌برها سرعت کار با خط فرمان را افزایش می‌دهند.

برخی از این کلیدواژه‌های پرکاربرد شامل موارد زیر است:

در این ساختار، کلیدواژه midnight معادل ساعت ۱۲:۰۰ شب (۰۰:۰۰)، کلیدواژه noon معادل ساعت ۱۲:۰۰ ظهر و کلیدواژه teatime معادل ساعت ۱۶:۰۰ (۴ عصر) است.

روش‌های غیرتعاملی برای ارسال دستور به at

در هنگام نگارش اسکریپت‌های بش یا فرایندهای اتوماسیون، ورود تعاملی به پرامپت at امکان‌پذیر نیست. ابزار at راه‌کارهای مختلفی را برای دریافت دستورها به صورت غیرتعاملی ارائه می‌دهد.

ارسال دستور از طریق تکنیک Pipe

شما می‌توانید خروجی متنی دستور echo را از طریق ورودی استاندارد و با استفاده از کاراکتر Pipe به دستور at ارسال کنید. این روش سریع‌ترین راه برای زمان‌بندی یک تک دستور است.

یک نمونه از این روش برای راه‌اندازی مجدد یک سرویس در ساعت ۲ بامداد به شکل زیر است:

اجرا و فراخوانی اسکریپت از طریق فایل با سوییچ f-

اگر مجموعه مفصلی از دستورها را در یک فایل اسکریپت ذخیره کرده‌اید، می‌توانید با استفاده از سوییچ f- مسیر فایل را مستقیم به ابزار at معرفی کنید.

دستور زیر اسکریپت بکاپ‌گیری را برای اجرا در ۳ ساعت آینده تنظیم می‌کند:

مدیریت و نظارت بر صف وظایف (دستورهای atq و atrm)

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

مشاهده لیست کارهای در صف با دستور atq

دستور atq تمام کارهایی را که توسط کاربران مختلف زمان‌بندی شده و هنوز به مرحله اجرا نرسیده‌اند نمایش می‌دهد.

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

خروجی این دستور شامل خطوطی است که حاوی شناسه کار (Job ID)، تاریخ، زمان دقیق اجرا و نام کاربر مربوطه است.

حذف و لغو یک کار زمان‌بندی شده با دستور atrm

اگر از اجرای یک دستور زمان‌بندی شده منصرف شدید، می‌توانید با استفاده از شناسه کار (Job ID) و دستور atrm آن را از صف لغو کنید.

برای حذف کار شماره 2 از صف اجرا می‌توانید دستور زیر را وارد کنید:

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

اگر به دنبال سرعت و پایداری هستید، زمان خرید سرور مجازی فرا رسیده است

مدیریت دسترسی کاربران و پیکربندی‌های امنیتی at

در محیط‌های سروری که چند کاربر به طور هم‌زمان به سیستم دسترسی دارند، محدود کردن قابلیت زمان‌بندی دستورها برای افزایش امنیت ضروری است. لینوکس برای کنترل دسترسی به ابزار at از دو فایل متنی ساده استفاده می‌کند.

فایل‌های کنترل دسترسی در مسیرهای زیر قرار دارند:

منطق کاری این فایل‌ها به شرح زیر است:

  • اگر فایل at.allow وجود داشته باشد، تنها کاربرانی که نام آن‌ها در این فایل نوشته شده است اجازه استفاده از دستور at را خواهند داشت و سایر کاربران مسدود می‌شوند.
  • اگر فایل at.allow وجود نداشته باشد، سیستم به سراغ فایل at.deny می‌رود. در این حالت، تمام کاربران اجازه استفاده از at را دارند مگر کاربرانی که نام آن‌ها درون فایل at.deny ثبت شده باشد.

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

جمع‌بندی

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

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