Cron
چطور میتوان توسط cron یک اسکریپت شل را در فواصل زمانی مشخص اجرا کرد؟ در اینجا مثالهایی برای استفاده از cron داریم.
محتویات |
اجرای یک وظیفه cron در هر ۵ دقیقه
فیلد اول مربوط به دقیقه میشود. اگر یک * در این فیلد استفاده شود، وظیفه در هر ۱ دقیقه اجرا میشود. اگر در فیلد اول 5/* استفاده شود، وظیفه در هر ۵ دقیقه اجرا خواهد شد.مانند مثال زیر :
*/5 * * * * /home/ramesh/backup.sh
- نکته: بصورت مشابه،
10/*برای هر دقیقه،15/*برای هر ۱۵ دقیقه،30/*برای هر ۳۰ دقیقه و ...
اجرای یک وظیفه cron در هر ۵ ساعت
فیلد دوم مربوط به ساعت میشود. اگر در این فیلد از * هر ۱ ساعت در نظر گرفته خواهد شد. اگر در فیلد دوم 5/* استفاده شود، وظیفه در هر ۵ ساعت اجرا خواهد شد.مانند مثال زیر :
0 */5 * * * /home/ramesh/backup.sh
اجرای یک وظیفه در هر ۵ ثانیه
وظایف cron نمیتوانند بصورت ثانیهای تنظیم شوند. مثلا نمیتوان تنظیم کرد که یک کار هر ۵ ثانیه اجرا شود. اما در عوض میتوان یک اسکریپت شل نوشت که در آن از دستور sleep 5 برای زمانبندی استفاده شده است. در مثال زیر از حلقه while در یک اسکریپت شل استفاده شده است که هر ۵ ثانیه کار خاصی را انجام میدهد:
#!/bin/bash while true do /home/ramesh/backup.sh sleep 5 done
حالا میتوان توسط nohup این اسکریپت را در پشتزمینه اجرا کرد. در این صورت، حتی بعد از خارج شدن از نشست حاضر هم اسکریپت در حالت اجرا باقی خواهد ماند. در این حالت هر ۵ثانیه یک بار شل اسکریپت backup.sh را اجرا خواهد نمود
$ nohup ./every-5-seconds.sh &
اجرای یک وظیفه cron در پنجمین روز هر هفته
این مثال برای اجرای یک وظیفه در هر ۵ روز نیست، بلکه در پنجمین روز هر هفته است. پنجمین فیلد DOW نام دارد (Day Of the Week). اگر در این فیلد از * استفاده شود، وظیفه در هر روز انجام خواهد شد. برای روز جمعه میتوان از عدد ۵ یا Fri استفاده کرد.
در مثال زیر اسکریپت backup.shدر نصفه شب هر جمعه اجرا خواهد شد:
0 0 * * 5 /home/ramesh/backup.sh (or) 0 0 * * Fri /home/ramesh/backup.sh
کلمات اختصاری و اعداد قابل استفاده در این فیلد در زیر آمده است :
- 0=Sun
- 1=Mon
- 2=Tue
- 3=Wed
- 4=Thu
- 5=Fri
- 6=Sat
اجرای یک وظیفه cron در هر ۵ ماه
این درست نیست که بگوییم هر ۵ ماه و بجای آن باید مشخص شود که وظیفه در چه ماههایی باید اجرا شود. مثلا ممکن است شما بخواهید در پنجمین ماه (May) و دهمین ماه (Oct) اجرا شود.
فیلد چهارم مربوطه به ماه میشود. اگر در این فیلد از * استفاده شود، وظیفه در هر ماه اجرا خواهد شد. اگر ماه خاصب مدنظر باشد، باید توسط عدد آن ماه مشخص شود. مثلا اگر ماههای May و Oct مدنظر باشد، میتوان از 5,10 در این فیلد استفاده کرد. یا خیلی سادهتر میتوان از ۳ حرف اول ماه مورد نظر استفاده کرد، مانند May,Oct.
فیلد سوم نیز DOM نام دارد (Day Of the Month). اگر از * در این فیلد استفاده شود، وظیفه در هر در ماه مشخص شده اجرا خواهد شد. اگر 1 استفاده شود، فقط در اولین روز آن ماه اجرا میشود.
در مثال زیر، اسکریپت backup.sh دوبار در سال، یکبار در نصفه شب اولین روز ماه May و یکبار دیگر در نصفه شب اولین روز ماه Oct :
0 0 1 5,10 * /home/ramesh/backup.sh (or) 0 0 1 May,Oct * /home/ramesh/backup.sh
- نکته: اشتباه نکنید و از
10-5که معنی آن ماه پنجم الی دهم است در این فیلد استفاده نکنید. اگر میخواهید وظیفه فقط در پنج و دهمین ماه اجرا شود، باید کاما استفاده کنید.