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

cron و rtcwake: خواب راحت

دانلود شبانه یکی از باحال‌ترین کارهاست ولی دردسرهایی داره: باید سیستم رو روشن بذارین تا سر ساعت شروع کنه. rtcwake قراره به کمک cron این مشکل رو برای همیشه برامون حل کنه تا به‌خاطر چند گیگ ناقابل از خواب‌مون نزنیم!

راهنماهای خوبی برای دانلود شبانه وجود دارن پس ما از اول شروع نمی‌کنیم و فقط تنظیم سیستم رو این‌جا شرح می‌دیم.
نکته: rtcwake و cron هردو روی توزیع دبیان به‌طور پیش‌فرض نصبن. برای نصبش روی توزیع خودتون از مدیربسته استفاده کنین. این روش به نوع توزیع وابسته نیست.

۱. کار با rtcwake

چون کار با بسیاری از سخت‌افزارهای سیستم نیازمند دسترسی روت هست، rtcwake که از ساعت سخت‌افزاری سیستم استفاده می‌کنه طبیعتاً از این قاعده مستثنی نیست. پس باید کارهای مربوط به rtcwake رو با این سطح دسترسی انجام بدیم. قالب مورد نیاز ما برای روشن کردن سیستم سر ساعت <TIME> که بر حسب زمان محلی وارد می‌شه( سوییچ l- این کار رو انجام می‌ده) به این صورته:

root@debian:~# rtcwake -l -m no -t $( date +%s -d <TIME> )

سوئیچ m به rtcwake می‌گه بعد از این که سیستم رو تنظیم کردی، هیچ‌کاری نکن(مثل خاموش کردن، حالت خواب و ...). date خروجی‌ش رو به rtcwake می‌ده که واحدش ثانیه‌ست و فاصله‌ی زمان داده‌شده رو با مبدأ زمانی یونیکس مشخص می‌کنه. مثلا ما می‌خوایم ساعت ۱ شب سیستم روشن بشه:

root@debian:~# rtcwake -l -m no -t $( date +%s -d 'tomorrow 01:00' )

کلمه‌ی tomorrow‍ به date می‌فهمونه که منظور ما ساعت ۱‍ شبی‌‍ه که از ساعت ۲۴ گذشته باشه؛ یعنی اگر این دستور بعد از ساعت ۱۲ شب اجرا بشه روشن کردن سیستم رو به فردا شب موکول می‌کنه! پس دقت کنین که الان ساعت چنده.

۲. افزودن به cron

خود cron یک‌سری کلمه داره که رویداد خاصی رو مشخص می‌کنه. مثلا reboot به معنی «هر وقت سیستم روشن شد»‍ه. چه خوب! ما از این قابلیت استفاده می‌کنیم و به cron می‌گیم که هروقت سیستم روشن شد برای دانلود شبانه تنظیمش کنه. این طوری دیگه نیازی به اجرای دستی rtcwake نیست.
معمولا چون cron خیلی از مسیرهای رایج رو توی متغییر محیطی PATH نداره مجبوریم خودمون دستی مسیر هر کدوم از اجرایی‌ها رو وارد کنیم.
توجه! مسیرهایی که این‌جا برای date و rtcwake استفاده شدن ممکنه روی سیستم شما فرق کنن. با دستور which می‌تونید از مسیر هر دستوری مطلع بشین.

اول cron مربوط به کاربر ریشه رو باز می‌کنیم:

root@debian:~# crontab -u root -e

حالا خط زیر رو واردش می‌کنیم. توجه داشته باشین که <TIME> رو با زمان دلخواهتون عوض کنین:

@reboot /usr/sbin/rtcwake -l -m no -t $( /bin/date +%s -d <TIME> )

و در انتها سیستم رو ریبوت کنین تا rtcwake ساعت رو تنظیم کنه.