منبع اصلی نوشتار زیر در این لینک قرار دارد

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

شاید براتون این مشکل وجود داشته که می‌خواستین فلان ساعت، یه کامندی تو ترمینال اجرا شه! (مثلا هر شب ساعت ۱۰، به یه شخصی فلان فایل ایمیل شه!) یا اینکه یه بار ساعت ۴ صبح که احتمالا پای کامپیوتر نیستین، شروع به دانلود فایل کنین و بعد ساعت ۸ صبح هم سیستم خود به خود خاموش شه. همه اینکارا با ترمینال لینوکس انجام میشه! برای انجام این‌کارها به ادامه مطلب مراجعه کنید.

چه روش‌هایی برای اینکار داریم؟

برای اینکار ها، ۳ روش داریم حداقل:

  • دستور sleep
  • دستور at
  • تعریف cronjob
    ۲ دستور اول فقط یک‌بار در تایمی که بهشون میدیم، کار مورد نظر رو انجام میدن، ولی دستور ۳ام خیلی امکانات بهتری داره! مثلا جلوتر میبینین که میشه بهش گفت روز اول هر ماه، لاگ‌های سیستم رو پاک کن :|

دستور sleep

این دستور در واقع به ترمینال میگه x ثانیه صبر کن. حالا بعدش میشه که دستور مورد نظر رو بدین بهش! بدیش هم اینه که همه چیز تو اون سشن ترمینال هست! استفاده ازش برای زمانبندی کارمون هم تو این قالبه:

1
$ sleep x; yourcommand

مثلا بگیم که ۵ ثانیه بعد، بهمون سلام بده:

1
$ sleep 5; echo SALAM

دستور at

این دستور نسبت به دستور sleep هم استفادش راحت‌تره، هم اینکه ترمینال برای کار شما نگه داشته نمیشه …
طریقه استفاده از اون هم اینطوریه که اول at X رو میزنین که X زمان مورد نظر هست، مثلا now + 1 hours که میگه از الان، ۱ ساعت بعد، کاریو که بهت میگم انجام بده، یا 0250 میگه که ساعت ۰۲:۵۰ امروز (اگه گذشته باشه فردا) اون کارو انجام بده! برای اطلاعات بیشتر، man at رو مطالعه کنین. حالا دو روش برای دادن کار ها به at داریم: از تو فایل، یا اینکه خودمون واردش کنیم! اگه بخوایم از تو فایل بدیم، باید یه سوییچ -file هم به at بدیم، یعنی اینطوری صداش کنیم:

1
$ at -file <file> <time>

که جای <file> باید آدرس فایل حاوی دستورات و <time> هم که همون زمان رو میزاریم.
اگه که بخوایم خودمون دستوراتو دستی بدیم، همونطور که قبلا گفتم at رو صدا میکنیم، بعد دستورات رو تو برنامه‌ای که باز میشه تو ترمینال وارد می‌کنیم، آخرشم CTRL+D میزنیم که بگیم کارمون تموم شد. مثال:

1
2
3
$ at 0237
echo salam
job 7 at Mon Sep 26 02:37:00 2016

تعریف cronjob

این یکی، خیلی آزادی زیادی به ما میده! اول برای اینکه cronjob های فعال سیستم رو ببینین، میتونین از

1
$ sudo crontab -l

استفاده کنیم. برای اینکه اونارو ویرایش کنیم یا چیزی بهشون اضافه کنیم، از دستور:

1
$ sudo crontab -e

استفاده میکنیم که با ادیتور دیفالت ترمینال، فایل حاوی cronjob ها رو باز میکنه.
همه cronjob ها باید تو فرمت

1
* * * * * /path/to/executable

باشن. هر ستاره، نماینده مقادیر زیر به ترتیب هست:

  • دقیقه (بین ۰ تا ۵۹)
  • ساعت (بین ۰ تا ۲۳)
  • روز ماه (بین ۱ تا ۳۱)
  • ماه (بین ۱ تا ۱۲)
  • روز هفته (بین ۰ تا ۶ که ۰ نماینده یکشنبه هست!)
    مثلا اون بالا گفتم که میشه بگیم روز اول ماه، فلان کارو کرد:
    1
    0 0 1 * * /path/to/executable

که ترجمه دقیقش میشه:

  • دقیقه ۰
  • ساعت ۰
  • روز ۱
  • هر ماه
  • هر روزی که بود
    اسکریپتی که تو آدرس /path/to/executable هست رو اجرا کن.

البته کارهای دیگه‌ای هم میشه کرد! مثلا یسری کلمه‌های کلیدی داریم مثل

1
2
3
4
5
6
7
8
@reboot Run once, at startup
@yearly Run once a year "0 0 1 1 *"
@annually (same as @yearly)
@monthly Run once a month "0 0 1 * *"
@weekly Run once a week "0 0 * * 0"
@daily Run once a day "0 0 * * *"
@midnight (same as @daily)
@hourly Run once an hour "0 * * * *"

که جای دقیقه میزاریم (بقیرو خالی میزاریم) که با توجه به کلمه، خودش یسری کار میکنه … (مثلا با @monthly همون کاری که بالا گفتیم رو انجام دادیم …)
کار دیگه‌ای که میشه انجام داد، اینه که مثلا می‌خواین که هر ده دقیقه یه بار، روزای دوشنبه تا جمعه، یه کاری انجام شه:

1
0,10,20,30,40,50 * * * 1-5 /executable

که میگه زمان هایی که دقیقه برابر با یکی از ۰، ۱۰، ۲۰، ۳۰، ۴۰ ،۵۰ بود، /executable رو اجرا کن. میشه تمیز ترم نوشتش:

1
*/10 * * * 1-5 /executable

برای راهنمایی و دیدن مشخصات کامل‌تر هر روش، پیشنهاد میشه که فقط به این مطلب بسنده نشه و man هر دستور خوانده شه! اگه مطلبی دارین که میخواین به متن اضافه شه یا نکته‌ی خاصی مد نظرتون هست، میتونین از بخش نظرات این صفحه استفاده کنین.



برچسب ها : , , ,