Cron Job در لینوکس چیست؟ آشنایی با دستورات کرون جاب
هیچ کس دوست ندارد انرژی نیروی انسانی خودش را صرف کارهای تکراری و طاقت فرسایی کند که یک برنامه هم می تواند آن را انجام دهد! اگر شما هم با این معضل درگیر هستید که نیروی انسانی شما زمانش را صرف کارهای تکراری می کند، راهکار استفاده از Cron Job است. اما این نرم افزار چه کار می کند؟
Cron Job بسیاری از فرایندهایی که توسط انسان ها انجام میشود را اتوماتیک میکند و با این کار در هزینه و زمان صرفه جویی می کند.
کاری که این نرم افزار انجام می دهد، این است که کارهای تکراری که در سیستم شما وجود دارد را در مدت زمان معینی به صورت کامل اجرا می کند که سبب می شود بتوانید هم در هزینه و هم در زمان صرفه جویی کنید. کرون جاب را هم در پنل دایرکت ادمین و هم در سایت هایی که با سیستم مدیریت محتوای وردپرس ایجاد شده اند، فعال است. حتی ماژول های مختلف زیادی وجود دارد که برای اضافه کردن این سیستم اتوماسیون به سایت ها است که می توانیم اهمیت کرون جاب را متوجه شویم.
در اینجا اشاره مختصری به کرون جاب داشتیم اما در ادامه Cron Job در لینوکس چیست؟ نحوه خودکارسازی دستورات با کرون جاب را به صورت کامل بررسی خواهیم کرد. اگر شما هم به دنبال اتوماتیک سازی برخی از فرایند ها هستید، این مقاله را از دست ندهید.
پیش از آن در نظر داشته باشید که برای کار با کرون جاب شما نیاز به سرور مجازی لینوکس دارید که می توانید از صفحه خرید سرور مجازی لینوکس نسبت به آن اقدام کنید.
Cron Job چیست؟
Cron Job (کرون جاب) در واقع یک اپلیکیشن است و همانطور که در بالا هم اشاره کردیم قادر است تا به کابران این دسترسی را بدهد تا بتوانند دستورات مورد نظرشان را برای اجرای مکرر و در زمان بندی مشخص، وارد کنند. اگر از این برنامه استفاده کنید، می توانید هر عملیات و کار را با خیال آسوده به Cron Job بسپارید تا بدون دخالت شما کارها پیش برود.
نکته ای که شاید بیان کردنش خالی از لطف نباشد، این است که کاری که کرون جاب در واقع انجام می دهد، به اجرا درآوردن اسکریپت ها یا تسک ها است و به تنهایی نمی تواند کاری را انجام دهد و به همین دلیل است که برای کار کردن با کرون جاب شما باید به زبان های برنامه نویسی و اسکریپت ها آشنایی داشته باشید یا آن را به کسی که متخصص است، بسپارید.
در چه مواردی از کرون جاب استفاده می شود؟
ما به صورت کلی گفتیم که چه استفاده هایی می توانید از کرون داشته باشید، اما در اینجا کمی عمیق تر به این برنامه نگاه می کنیم و دیگر کارهایی که می توانید با اپلیکیشن انجام دهید را برایتان آورده ایم:
- امکان برنامه ریزی برای پشتیبان گیری اتوماتیک در تایم مشخص
- عملیات های مرتبط با تعمیر و نگهداری کردن از سیستم
- برخورداری از قابلیت نظارت بر فضای دیسک
- پاک کردن فضای کش به صورت اتوماتیک
- امکان بررسی لینک های خراب در وب سایت
مقایسه Cron و cron job و crontab
اگر با این برنامه کار کنید، احتمالاً با سه اصطلاح روبرو خواهید شد که شبیه یکدیگر هستند و ممکن است شما را کمی گیج کند: cron، cron job و crontab. بگذارید شما را به این سه مفهوم آشنا کنیم:
cron
این یک برنامه واقعی است که بر روی سیستم خود نصب می کنید و به صورت دیمون اجرا می کنید.
cron job
job در لینوکس برنامه ای است که در حال اجراست. Cron می تواند چندین کار را انجام دهد و آنها را در زمان برنامه ریزی شده خود اجرا کند. هر یک از این وظایف به عنوان ” cron job” نامیده می شوند.
crontab
این فایل (و دستور) است که در آن تعریف میکنید که چه کاری و چه زمانی اجرا شود. یک crontab میتواند چندین کار cron را به شکل جدولی داشته باشد که در آن هر ردیف یک کار cron است.
اجازه دهید نمونه cron job را به اشتراک بگذارم که هر ساعت اجرا میشود و « Linux is cool!» را چاپ میکند. به نام فایل crontab_log.txt.
0 * * * * echo "Linux is Cool!" >> ~/crontab_log.txt
Cron را نصب کنید
اغلب اوقات Cron به طور پیش فرض روی دستگاه اوبونتو شما نصب شده است. در صورتی که این برنامه را ندارید، می توانید آن را خودتان نصب کنید.
برای این کار باید از کد زیر استفاده کنید و لیست بسته محلی سیستم خود را به روز کنید:
sudo apt update
و جدیدترین نسخه cron را نصب کنید. دستور زیر همچنین Cron را به آخرین نسخه به روز می کند، اگر قبلاً آن را نصب کرده اید:
sudo apt install cron
تبریک میگم اکنون آخرین نسخه Cron را روی دستگاه خود نصب کرده اید.
شروع کار با کرون
بیایید با (یک مثال دیگر) از نحوه شروع کار با کرون برایتان بزنیم.
برای ایجاد Cron job یا دستوراتی که cron اجرا می کند، به سادگی کد زیر را اجرا کنید:
crontab -e
این کد فایلی را برای ویرایش cron job با استفاده از موارد زیر باز می کند:
تمام خطوطی که با # شروع میشوند (که همه خطوط هستند) فقط به شما کمک میکنند تا نحوه استفاده از cron را راهنمایی کنید و در صورت عدم نیاز میتوان آنها را حذف کرد.
اگرچه ما از موارد زیر به عنوان اولین کار Cron خود استفاده خواهیم کرد:
* * * * * touch ~/crontab_test
بیایید آنچه را که سبب افزایش سرعت می شود را نگاهی بیاندازیم:
کارهای کرون به شکل دستور دقیقه ساعت در روز ماه هفته می آیند.
دقیقه در این زمینه به سادگی به این معنی است که کار چند دقیقه از یک ساعت اجرا خواهد شد. بنابراین تعیین 0 در همان ابتدای یک ساعت اجرا می شود و تعیین 5 در دقیقه پنجم یک ساعت اجرا می شود.
در مرحله بعد، اعلام ساعت مشخص میکند که یک کار چه ساعاتی از روز را میتواند اجرا کند، از مقادیر 0-23.
دلیل اینکه گزینه ساعت 24 در اینجا وجود ندارد این است که 23 به انتهای ساعت 11:59 می رسد، در این نقطه نیمه شب یا ساعت 0 روز بعد. همین منطق در مورد اعلامیه دقیقه ای که قبلاً ذکر شد نیز صدق می کند.
روز مشخص میکند که یک کار در چه روزی از ماه میتواند اجرا شود، یعنی 1-31 (برخلاف مثالهای قبلی که در 0 شروع شده بودند).
ماه مشخص می کند که یک کار در چه ماه هایی از سال می تواند اجرا شود و مقادیری از 1 تا 12 را در نظر می گیرد.
در نهایت، week مشخص میکند که یک کار در کدام روزهای هفته اجرا میشود، که از یکشنبه شروع میشود، برخلاف دو مورد آخر، با مقادیر 0-6.
سپس دستوری را مشخص می کنید که می خواهید اجرا شود.
با پیروی از مثال قبلی * * * * * ~/crontab_test را لمس کنید، به سادگی هر دقیقه لمس ~/crontab_test را اجرا می کنید.
بیایید آن را در crontab قرار دهیم و سپس آن را در عمل ببینیم:
اگر تا دقیقه بعد منتظر بمانید، فایل crontab_test را در فهرست اصلی خود خواهید دید:
و این اصول استفاده از cron است!
بگذارید یک مثال بهتری از cron job برایتان بزنیم؛ این مثالی که برایتان آوردیم، ساده بود و فایده چندانی هم شاید برایتان نداشته باشد.
فرض کنید میخواهید کاری کمی پیچیدهتر انجام دهید، مثلاً یک اسکریپت پشتیبان که نیاز دارد فایلها را از چندین فهرست در سیستم شما در یک پوشه کپی کند و سپس آن نسخه پشتیبان را در یک فایل بایگانی کند.
این را می توان به سادگی با قرار دادن دستورات ما در یک اسکریپت انجام داد، که سپس می تواند توسط cron فراخوانی شود.
بیایید از اسکریپت زیر به عنوان مثال استفاده کنیم:
#!/usr/bin/bashecho "Backing up..."mkdir -p ~/.local/tmp/tar -Pc ~/Documents/ -f ~/.local/tmp/backup.gz
این اسکریپت کارهای زیر را انجام می دهد:
- اطمینان حاصل می کند که دایرکتوری
~/.local/tmp/backup_dir
در سیستم وجود دارد. - همه چیز را از
~/Documents/
در بایگانی واقع در ~/.local/tmp/backup.gz قرار می دهد.
بیایید ابتدا اسکریپت را به صورت دستی اجرا کنیم تا ببینیم واقعاً کار می کند.
ابتدا اجازه دهید اسکریپت را در ~/backup_script
قرار دهیم مانند این:
سپس فقط محتویات اسکریپت را که در بالا نشان داده شد در فایل کپی کنید.
سپس باید به سیستم بگویید که اسکریپت ما با اجرای chmod +x ~/backup_script
مجاز است اجرا شود:
سپس می توانید اسکریپت ما را با اجرای ~/backup_script.sh
آزمایش کنید، که به سادگی مسیر اسکریپت ما را به سیستم ما می گوید:
سپس می توانید این نسخه پشتیبان را فقط با اجرای tar -xf ~/.local/tmp/backup.gz -C output_dir
بازیابی کنید، جایی که output_dir دایرکتوری برای ذخیره فایل ها است.
این اسکریپت اکنون می تواند با استفاده از Cron به صورت برنامه ریزی شده اجرا شود!
برای مثال، اگر میخواهید اسکریپت هر روز ساعت 3 صبح اجرا شود، میتوانید از دستور زیر در cron استفاده کنید:
0 3 * * * ~/backup_script
و پس از آن شما می خواهید پشتیبان گیری به صورت روزانه ایجاد شود.
فایل های پیکربندی Crontab را مدیریت کنید
Crontab که به عنوان جدول Cron نیز شناخته می شود، لیستی از تنظیمات محیط و دستورات Cron است که در یک فایل ذخیره می شود و توسط cron daemon برای اجرای وظایف بر اساس برنامه زمان بندی شده استفاده می شود. انواع مختلفی از فایلهای crontab موجود است، بنابراین بیایید آنها را یکی یکی مرور کنیم.
فایل های Crontab متعلق به کاربر را مدیریت کنید
کاربران فایلهای crontab خود را دارند که در ناحیه spool ذخیره میشوند و به نام حساب کاربر نامگذاری میشوند. هر crontab به عنوان کاربری که مالک crontab است اجرا می شود. میتوانید فایلهای crontab متعلق به کاربر را با فهرست کردن همه فایلها در فهرست spool بررسی کنید:
ls /var/spool/cron/crontabs
همانطور که مشاهده می کنید در حال حاضر 3 فایل crontab برای کاربران به نام های root، user1 و user2 ایجاد شده است.
فایلهای پیکربندی Crontab برای تک تک کاربران نباید مستقیماً ویرایش شوند، بلکه باید با استفاده از دستور crontab ویرایش شوند. برنامه crontab خود فایل crontab را بدون نیاز به دسترسی root تایید و نصب می کند.
شما قبلاً از دستور crontab -e استفاده کرده اید که یک crontab جدید برای یک کاربر ایجاد می کند یا اجازه ویرایش یک crontab موجود را می دهد. با استفاده از دستور زیر می توانید محتویات فایل crontab موجود خود را بررسی کنید:
crontab –l
همانطور که می بینید، یک کار Cron فعال وجود دارد که قبلا اضافه کرده ایم.
اگر می خواهید فایل crontab خود را حذف کنید تا تمام کارهای برنامه ریزی شده شما خاتمه یابد، از دستور زیر استفاده کنید:
crontab -r
فایل های Crontab در سراسر سیستم را مدیریت کنید
فایلهای crontab در سراسر سیستم پس از نصب cron ایجاد میشوند و عمدتاً توسط سرویسهای سیستم استفاده میشوند. بسته هایی مانند dpkg، sysstat و بسیاری دیگر به cron بستگی دارند و از آن برای برنامه ریزی وظایف خاص استفاده می کنند. در crontab یک سیستم یک فیلد کاربری وجود دارد که برای اجرای وظایف داده شده استفاده می شود.
crontab های سیستم باید متعلق به root باشند و توسط هیچ کاربر دیگری قابل ویرایش نیستند. هیچ دستور crontab برای ویرایش این فایل ها وجود ندارد، بنابراین مدیر سیستم می تواند مستقیماً به آنها دسترسی داشته باشد. با استفاده از کد زیر به crontab سیستم اصلی دسترسی پیدا می کنیم:
vim /etc/crontab
همانطور که می بینید، ما متغیرهای محیطی SHELL و PATH را تعریف کرده ایم. همچنین چهار وظیفه Cron وجود دارد که مختص سیستم عامل های مبتنی بر دبیان است. این وظایف قرار است از ابزار run-parts برای اجرای تمام اسکریپت هایی که در cron.hourly/، cron.daily/، cron.weekly/، cron.monthly/ قرار می گیرند، به ترتیب ساعتی، روزانه، هفتگی و ماهانه استفاده کنند.
هر اسکریپت در دایرکتوری های ذکر شده در بالا باید تایید قسمت های اجرا شده را بگذراند. یک اسکریپت باید قابل اجرا باشد، متعلق به root باشد و توسط گروه یا دیگران قابل نوشتن نباشد. در ادامه یک اسکریپت ساده bash ایجاد می کنیم که قادر است قیمت بیت کوین را به صورت ساعتی ثبت کند:
vim /etc/cron.hourly/get_bitcoin_price
#!/usr/bin/bash
result=$(curl https://api.coinbase.com/v2/prices/spot?currency=USD)
bitcoin_price=$(jq -r '.data.amount' <<< ${result})
echo "Bitcoin price is $bitcoin_price USD on $(date)" >> $HOME /bitcoin_prices.txt
اسکریپت ما یک API Coinbase را جستجو میکند، اطلاعات قیمت بیتکوین را در JSON دریافت میکند، آن را با برنامه jq تجزیه میکند تا قیمت را انتخاب کند و آن را همراه با تاریخ فعلی در فایل bitcoin_prices.txt در فهرست خانه /root ثبت میکند.
اسکریپتی که در دایرکتوری /etc/cron.daily/
قرار می دهید می تواند هر اسکریپتی باشد که دوست دارید به صورت ساعتی اجرا شود. فقط فراموش نکنید که یک مسیر به پوسته دلخواه خود در بالا بنویسید (#!/usr/bin/bash) و اسکریپت خود را قابل اجرا کنید:
chmod u+x /etc/cron.daily/get_bitcoin_price
میتوانید اسکریپت خود را دوباره بررسی کنید تا مطمئن شوید که قابل اجرا است، متعلق به root است و برای گروه و دیگران قابل نوشتن نیست:
به نظر می رسد اسکریپت ما به خوبی پیکربندی شده است و آماده اجرا شدن توسط کرون به صورت ساعتی است.
همچنین یک دایرکتوری /etc/cron.d/
در سیستم های مبتنی بر دبیان وجود دارد. Cron با تمام فایلهای این دایرکتوری مانند فایل اصلی /etc/crontab
رفتار میکند، با این تفاوت که فایلهای crontab که در /etc/cron.d/
قرار داده میشوند، متغیرهای محیطی را بارگیری نمیکنند. فقط توصیه می شود در صورت نیاز به جداسازی اضافی، فایل های crontab جداگانه در فهرست /etc/cron.d/
ایجاد کنید.
خروجی Cron را مدیریت کنید
خروجی cron jobs – هم STDOUT و هم STDERR – به طور پیش فرض به طور خودکار به mailbox مالک crontab ارسال می شود. mailbox هر کاربر یک فایل متنی استاندارد است که در فهرست /var/mail/
ذخیره می شود. اگر بسته mailutils نصب شده باشد، می توانید مستقیماً یا از طریق دستور mail به آن دسترسی داشته باشید.
شما می توانید رفتار پیش فرض را با تعیین دستورالعمل MAILTO در فایل crontab خود تغییر دهید. به عنوان مثال، اگر می خواهید خروجی وظایف Cron شما به یک کاربر john ارسال شود، باید خط زیر را در بالای crontab خود اضافه کنید:
MAILTO=john
صندوق پست محلی کاربر با ایمیل ارسال شده از طریق اینترنت متفاوت است. اگر می خواهید ایمیلی خارج از سرور خود ارسال کنید، می توانید این کار را با تعیین دستورالعمل MAILTO انجام دهید:
[email protected]
البته، اگر ایمیلی را از طریق شبکه اینترنت ارسال می کنید، باید نوعی از سرور SMTP – Sendmail، Postfix و غیره را داشته باشید که بر روی همان هاست یا LAN شما اجرا می شود.
Cron Logs را مدیریت کنید
گزارش های Cron به طور پیش فرض در /var/log/syslog
فایل ثبت جهانی ذخیره می شوند. اگر میخواهید فعالیت Cron خود را ببینید، فایل syslog را فیلتر کنید تا فعالیت خدمات CRON را پیدا کنید:
grep CRON /var/log/syslog
فعالیت فایل Crontab نیز ثبت شده است. اگر می خواهید آن را ببینید، فقط فایل syslog را بر این اساس فیلتر کنید:
grep crontab /var/log/syslog
فیلتر کردن فایل ثبت جهانی هر بار خیلی راحت نیست. یک تمرین بهتر این است که ابزار rsyslog را برای کپی کردن گزارشهای cron در یک فایل جداگانه پیکربندی کنید. برای این کار فایل زیر را ویرایش کنید:
vim /etc/rsyslog.d/50-default.conf
شما باید خط زیر را از کامنت بردارید:
cron.* /var/log/cron.log
فایل را ذخیره کنید و سرویس rsyslog را مجددا راه اندازی کنید تا پیکربندی اجرا شود:
systemctl rsyslog را مجددا راه اندازی کنید
پس از مدتی باید یک فایل cron.log جدید ایجاد شده در پوشه /var/log/ را مشاهده کنید که گزارشهای فعالیت Cron شما داخل آن است:
cat /var/log/cron.log
اگر پیکربندی syslog را تغییر ندادهاید، هر ورودی گزارش از یک الگوی استاندارد پیروی میکند:
[timestamp] [hostname] [app_name] [log_message]
به عنوان مثال می توانید ببینید که ردیف های گزارش از این الگو پیروی می کنند:
Jan 14 15:12:01 ubuntu-sandbox CRON[345431]: (root) CMD (echo "Hello World at $(date)" >> $HOME/greetings.txt)
بیایید این فیلدها را تشریح کنیم:
timestamp=Jan 14 15:12:01
– تاریخ و زمانی را که پیام در سیستم ایجاد شد را نشان می دهد.
hostname=ubuntu-sandbox
– سیستمی را نشان میدهد که پیام را ارسال کرده است.
app_name=CRON[345431]
– نشان دهنده نام و شناسه فرآیند برنامه کاربردی است که پیام را ارسال کرده است.
log_message=(root) CMD (echo “Hello World at $(date)” >> $HOME/greetings.txt)
– اقدامی که انجام شد. در این مورد CRON به ما اطلاع می دهد که cronjob کاربر اصلی زیر اجرا شده است:
echo "Hello World at $(date)" >> $HOME/greetings.txt.
💡 نکته مهم: اطلاعات ثبت نام درباره اسکریپت هایی که در دایرکتوری های /etc/cron.{ساعتی، روزانه، هفتگی، ماهانه}/ اجرا شده اند را مشاهده نخواهید کرد، مگر اینکه آن اسکریپت ها به صراحت خروجی را به فایل cron.log هدایت کنند.
Cron Jobs را با Cronitor مانیتور کنید
رفت و برگشت در لاگ های Cron ممکن است دردسرساز باشد، به خصوص اگر صدها کار در سیستم شما در حال اجرا باشد. خوشبختانه، ابزارهای نظارت بر مشاغل Cron در بازار موجود است که به شما کمک می کند تا مشاغل cron خود را نظارت کنید و در زمان واقعی بینش دریافت کنید.
یکی از این ابزارها Cronitor است که وضعیت، معیارها و خروجی هر کار Cron را ثبت می کند. با ابزارهایی مانند Cronitor میتوانید به راحتی هر شغل را نامگذاری و سازماندهی کنید و همچنین اطمینان حاصل کنید که اگر اتفاقی بیفتد به افراد مناسب هشدار داده شود.
نظارت بر 5 کار کرون با Cronitor رایگان است و شروع آن آسان است. بعد از اینکه Cronitor CLI را نصب کردید و کلید API خود را پیکربندی کردید، دستور زیر را برای اسکن crontabs سیستم خود برای تمام کارهای Cron فعال اجرا کنید:
cronitor discover
از شما خواسته می شود تا مشاغل Cron خود را نام ببرید و پس از اتمام کار، Cronitor بلافاصله نظارت بر آنها را آغاز می کند. می توانید وضعیت مشاغل Cron خود را بررسی کنید و هشدارها را در داشبورد Cronitor خود پیکربندی کنید:
سخن آخر
همانطور که دیدید، به راحتی می توان بسیاری از کارهایی که نیروی انسانی مجبور به انجام دادن و صرف انرژی برای آن است، را اتوماتیک کرد و آب هم از آب تکان نخورد. به هر حال پیشرفت تکنولوژی برای رفاه و راحتی افراد بسیار مهم است. ما در این مقاله صفر تا صد این کار را به شما آموزش دادیم. در صورتی که سوالی در این زمینه دارید، می توانید با ما در قسمت نظرات به اشتراک بگذارید. در صورتی که فکر می کنید ما نکته ای را جا انداخته ایم، حتما مطرح کنید و به کامل تر شدن مقاله ما کمک کنید.
سوالات متداول:
آیا با کرون جاب می توان نیاز به نیروی انسانی را کاهش داد؟
بله با استفاده از کرون جاب می توانید بسیاری از فرایند ها را اتوماتیک کنید و در زمان و هزینه هم صرفه جویی کنید. با این کار نیاز به نیروی انسانی کاهش می یابد.