دستور at برای زمان بندی کارها , مثلا اجرا شدن یک دستور در زمان خاصی یا اجرا شدن یک اسکریپت در زمان خاصی استفاده میشود
دستور مشابه دیگه ای مثل دستور at هستش که اسمش cron هستش
اموزش cron :
CronHowto - Iranian Ubuntu Team Wiki
یکی از فرق های مهم cron و at در این هست که cron قابلیت تکرار شدن رو داره (( مثلا هر روز در زمان خاصی کار خاصی انجام بشه)) اما at کاری که بهش دادیم رو یک بار انجام میدهد
شکل کلی دستور
کد:
at [-V] [-q queue] [-f file] [-mldv] timespec...
at [-V] [-q queue] [-f file] [-mkdv] [-t time]
یا به شکل ساده تر
تعیین زمان درat
تنها قسمت مهم دستور at تعیین زمان اجرا شدن دستور هستش
در دستور at وقتی که دستور به همراه زمان معیین شده زدین یک صفه باز میشه که به صورت زیر هستش در اون صفه میتونین دستور مورد نظر خودتونو بنویسین و سپس کلید ترکیبی Ctrl+D رو بزنین تا اجرا بشه
کد:
alieblice@ubuntu:~$ at 12:00 tomorrow + 3 min
warning: commands will be executed using /bin/sh
at> ls > ~/Desktop/ls.txt
at> حالا کنترل= دی رو بزنین <EOT>
job 73 at Fri Jul 10 12:03:00 2009
alieblice@ubuntu:~$
جزع به جزع دستور بالا در پایین تر توضیح داده شده
معنی کلمات در تعیین زمان
اگه فرض کنیم ساعت وتاریخ هم اکنون
کد:
10:00 AM Tuesday, September 18, 2001
باشد ,, هر کدوم از زمان یندی های زیر معنیشونو جلوشون نوشته
کد:
at noon = 12:00 PM September 18, 2001
at midnight = 12:00 AM September 19, 2001
at teatime = 4:00 PM September 18, 2001
at tomorrow = 10:00 AM September 19, 2001
at noon tomorrow = 12:00 PM September 19, 2001
at next week = 10:00 AM September 25, 2001
همون طور که در بالا میبینین بعضی کلمات معنی خاصی دارن مثلا noon یعنی ساعت 12:00 pm و کلمات به صورت ترکیبی هم میتونن استفاده بشن مثلا
یعنی فردا ((روز بعد از امروز )) ساعت 12:00 pm
اگه امروز سه شنبه ساعت 10 صبح باشه دستور بالا میگه هفته ی دیگهسه شنبه ساعت 10 صبح کار انجام بشه
مشخص کردن روز های هفته
برای هر روز از هفته یک کلمه داریم که میتونین تمام حروفشون رو به صورت بزرگ یا کوچک بنویسین فرقی نداره البته اسم کوچکش هم با حروف کوچک یا بزرگ میتونین بنویسین فرقی نداره
کد:
day_of_week : SUN | MON | TUE | WED | THU | FRI | SAT
از چپ به راست به ترتیب بالا یعنی
کد:
Sunday | Monday | Tuesday | Wednesday | Thursday | Friday | Saturday |
چند مثال :
کد:
at next monday = 10:00 AM September 24, 2001
اگه الان ساعت 10 صبح باشه یک شنبه بعدی همین ساعت دستور اجرا میشه
روز جمعه ساعت 4:46 دقیقه صبح کارو انجام میده
نام گذاری ماه ها
کد:
ماه ها هم مثل روز های هفته برای خودشون اختصار دارن که به شکل زیر هستش
month_name : JAN | FEB | MAR | APR | MAY | JUN
| JUL | AUG | SEP | OCT | NOV | DEC
چند مثال
ساعت 2:5 ظهر در تاریخ 21 سپتامر
چند مثال اضافه از تمام قسمتایی که تا الان گفتیم
اگه فرض کنیم هم اکنون ساعت و تاریخ
کد:
10:00 AM Tuesday, September 18, 2001
کد:
at 9:00 AM = 9:00 AM September 19, 2001
at 2:30 PM = 2:30 PM September 18, 2001
at 1430 = 2:30 PM September 18, 2001
at 2:30 PM tomorrow = 2:30 PM September 19, 2001
at 2:30 PM next month = 2:30 PM October 18, 2001
at 2:30 PM Fri = 2:30 PM September 21, 2001
at 2:30 PM Sept 21 = 2:30 PM September 21, 2001
at 2:30 PM 9/21/2010 = 2:30 PM September 21, 2010
at 5 pm Friday = خودتون حدث بزنین
نکته : بعد از next مقادیری که بر اثاث واحد های زیر باشه میتونه بیاد
کد:
* minute[s]
* hour[s]
* day[s]
* week[s]
* month[s]
* year[s]
نکته :
در
کد:
at 1430 = 2:30 PM September 18, 2001
از am و pm نمیتونین استفاده کنین باید زمان رو به صورت 24 ساعته بزنین یعنی مثلا به جای 2 ظهر بزنین 14
زمان مع***Countdown
شاید بخاین کاری رو در مثلا 5 دقیقه اینده انجام بدین یا مثلا در فردا پنج دقیقه بعد از ساعت 12 ظهر خوب این 5 دقیقه ها رو باید به صورت زیر بنویسین
نکته : مقا
کد:
دیری که بعد از بعلاوه می ایند بر اثاث یکی از این واحد های زیر میتونه باشه
* minute[s]
* hour[s]
* day[s]
* week[s]
* month[s]
* year[s]
مثلا برای این که کاری رو در 25 دقیقه اینده از هم اکنون انجام بدین دستورو این جوری بنویسین
به جای min میتونین minutes یا minute هم بزارین
برای این که کاری رو فردا 3 ساعت بعد از ساعت 12 انجام بدین دستورو این شکلی بنویسین
کد:
at noon tomorrow +3 hours
یا
at 12:00 pm tomorrow +3 hours
جند مثال از این قسمت
اگه فرض کنیم زمان و تاریخ هم اکنون
کد:
10:00 AM Tuesday, September 18, 2001
معنی هر مثال جلوش نوشته شده
کد:
at now + 30 minutes = 10:30 AM September 18, 2001
at now + 1 hour = 11:00 AM September 18, 2001
at now + 2 days = 10:00 AM September 20, 2001
at 4 PM + 2 days = 4:00 PM September 20, 2001
at now + 3 weeks = 10:00 AM October 9, 2001
at now + 4 months = 10:00 AM January 18, 2002
at now + 5 years = 10:00 AM September 18, 2007
چند مثال واقعی به همراه کار
روش کار به این صورت هستش که شما اول دستور at رو به همراه زمان اجرا شدنش مینویسین و سپس برای شما یک صفه باز میشه که در اون جا میتونین دستور مورد نظرتونو بنویسین و برای این که کار خود را ذخیره کنین کلید ترکیبی Ctrl+D رو بزنین
در دستور زیر کاری رو فردا 3 دقیقه بعد از ساعت 12 انجام میدهد
کد:
alieblice@ubuntu:~$ at 12:00 tomorrow + 3 min
warning: commands will be executed using /bin/sh
at> ls > ~/Desktop/ls.txt
at> <EOT>
job 73 at Fri Jul 10 12:03:00 2009
alieblice@ubuntu:~$
دستور بالا رو میتونین به صورت زیر هم بنویسین که فکر کنم راحت تر باشه
کد:
alieblice@ubuntu:~$ echo ls > ~/Desktop/ls.txt | at 12:00 tomorrow + 3 min
warning: commands will be executed using /bin/sh
job 74 at Fri Jul 10 12:03:00 2009
alieblice@ubuntu:~$
اپشن v- (( وی کوچک ))
اپشن v- برای نشون دادن زمان اجرا شدن دستور در همان اول کار یعنی قبل از امدنه صفحه ای که شما توش دستورو مینویسین
کد:
alieblice@ubuntu:~$ at -v noon jul 24 + 10 min
Fri Jul 24 12:10:00 2009
warning: commands will be executed using /bin/sh
at> cp -r /home/alielbice /var/backup/alieblice-bkp
at> <EOT>
job 77 at Fri Jul 24 12:10:00 2009
alieblice@ubuntu:~$
اپشن f-
اپشن f- برای دادن لیستی از کار هایی که میخایم انجام بدیم از طریق یک فایل متنی هستش
کد:
alieblice@ubuntu:~$ cat myjobs.txt
/home/sathiya/calculate-space.sh
/path/to/a/shell-script
/path/to/any/command/or/script
کد:
alieblice@ubuntu:~$ at -f /home/alieblice/jobs.txt now +1 hour
warning: commands will be executed using /bin/sh
job 79 at Thu Jul 9 08:07:00 2009
alieblice@ubuntu:~$
اپشنl-
نکته : به جای l- میتونین از atq هم استفاده کنین
این اپشن و atq برای لیست کردن کار هایی که هنوز انجام نشده اند و در انتظار رسیدن زمان تعیین شده هستن استفاده میشه
کد:
alieblice@ubuntu:~$ at -l
79 Thu Jul 9 08:07:00 2009 a alieblice
77 Fri Jul 24 12:10:00 2009 a alieblice
73 Fri Jul 10 12:03:00 2009 a alieblice
74 Fri Jul 10 12:03:00 2009 a alieblice
alieblice@ubuntu:~$
همون طور که میبینین هر کار برای خودش عددی دارد که از اون برای پاک کردن و دیدن محتویات اون استفاده میشه
[b]
پاک کردن یک کار
از اپشن d- یا atrm میتونین استفاده کنین
برای این کار نیاز به شماره اون کار دارین که میتونین با لیست کردنشون شمارشونو یدست بیارین
مثلا در زیر کار به شماره 77 رو پاک میکنیم
کد:
alieblice@ubuntu:~$ atq
79 Thu Jul 9 08:07:00 2009 a alieblice
77 Fri Jul 24 12:10:00 2009 a alieblice
73 Fri Jul 10 12:03:00 2009 a alieblice
74 Fri Jul 10 12:03:00 2009 a alieblice
alieblice@ubuntu:~$
alieblice@ubuntu:~$ at -d 77
alieblice@ubuntu:~$
alieblice@ubuntu:~$ at -l
79 Thu Jul 9 08:07:00 2009 a alieblice
73 Fri Jul 10 12:03:00 2009 a alieblice
74 Fri Jul 10 12:03:00 2009 a alieblice
alieblice@ubuntu:~$
دیدن اطلاعات یک کار
برای این کار از اپشن c- ((سی کوچک )) استفاده کنین
خروجیش زیاد بود برای همین فقط خود دستور رو میزارم
کد:
alieblice@ubuntu:~$ at -l
73 Fri Jul 10 12:03:00 2009 a alieblice
74 Fri Jul 10 12:03:00 2009 a alieblice
alieblice@ubuntu:~$
alieblice@ubuntu:~$ at -c 73
#!/bin/sh
# atrun uid=1000 gid=1000
# mail alieblice 0
umask 22
خروجی کامل نیست
حدود کردن دسترسی بهat
رای این که دسترسی کاربران رو به دستور at ببندین یا دسترسی رو برای یک سری کار بر خاص باز بگذارین میتونین از 2 فایل زیر استفاده کنین
سیستم اول فلدر at.allow رو چک میکنه اگه وجود نداشت میره سراغ at.deny
/etc/at.allow
/etc/at.deny
مثلا اگه کاربر tia رو به فایل at.deny اضافه کنین موقعی که کاربر tia بخاد از at استفاده کنه این اررور رو میگیره
کد:
tia@ubuntu:~$ at 12:00 pm
You do not have permission to use at.
tia@ubuntu:~$
اگرم بخاین که at رو برای فقط کاربرای مشخصی باز بگذارین از فلدر at.allow استفده کنین
ممکنه این فلدر وجود نداشته باشه میتونین بسازینش
فایل های مرتبط به at
کد:
/var/spool/cron/atjobs
/var/spool/cron/atspool
/var/run/utmp
/etc/at.allow
/etc/at.deny
منابع :
Understand at, atq, atrm, batch Commands using 9 Examples
Help -
At Command Details and Examples
at command
The at Command Syntax