انجمنهای فارسی اوبونتو
کمک و پشتیبانی => راهنماها، نکات و ترفندها => نویسنده: سعید زبردست در 04 آذر 1386، 10:28 قظ
-
Cron چیست؟
Cron ابزاری (سرویسی؟) است که دستورات shell را به صورت دوره ای، بر اساس زمانبندی داده شده اجرا می کند. Cron بوسیله crontab گردانیده می شود. Crontab فایل پیکربندی ای است که جزییات دستورات و جدول زمانبندی در آن نگهداری می شود.
اطلاعات بیشتر در ویکی:
http://wiki.ubuntu-ir.org/CronHowto (http://wiki.ubuntu-ir.org/CronHowto)
-
:)
بسیار عالی. فک کنم آقا سعید سرویسها یا برنامههایی که برای کارهاشون نیاز دارند رو بعد از راهاندازی ویکی میکنن ;)
راستی سعید جان از این به بعد صفحاتی که درست میکنید رو عضو CategoryCleanup کنید تا مرور بشن و تو صفحه اول ویکی لینک داده بشن. ممنون
http://forum.ubuntu.ir/index.php?topic=2419.msg18082#msg18082
-
راستش آره. من هر سرویسی رو برای کارهام نیاز دارم، بعد از راه اندازی ویکیشون می کنم ;D
این مقاله رو عضو CategoryCleanup کردم :)
-
با درود فراوان
دوستان من هر کاری میکنم دستورات داخل فایل اجرا نمشن . آیا بجز تنظیمات ذکر شده چیز دیگه هم میخواد ؟
-
سلام
crontab برا من کار نمیکنه.مثلا این دستورو میزنم اما انگار نه انگار:
24 13 * * * gwget
-
سلام
crontab برا من کار نمیکنه.مثلا این دستورو میزنم اما انگار نه انگار:
24 13 * * * gwget
به جای gwget باید آدرسش رو کامل بنویسی. مثلا:
/usr/bin/gwget
-
سعید فکر کنم عنوان موضوع خراب شده :)
-
سلام
crontab برا من کار نمیکنه.مثلا این دستورو میزنم اما انگار نه انگار:
24 13 * * * gwget
به جای gwget باید آدرسش رو کامل بنویسی. مثلا:
/usr/bin/gwget
سلام
مگه اونجا نباید دستور باشه؟خوب اونم دستورشه دیگه!
متشکرم :)
-
سلام
با
/usr/bin/gwget
هم نمیشه :-X
-
چه خطایی میده؟
-
چه خطایی میده؟
فقط اجرا نمیشه.خطایی نمیده! یعنی من چطوری خطاشو ببینم؟!
-
لاگ های crontab در پوشه
/var/log/
با نام های cron و cron1 و ... ذخیره میشن :)
-
سلام
نیست!این خروجی ls /var/log
apparmor fontconfig.log samba
apt fsck syslog
aptitude gdm syslog.0
auth.log installer syslog.1.gz
auth.log.0 jockey.log syslog.2.gz
boot jockey.log.1 syslog.3.gz
bootstrap.log jockey.log.2.gz syslog.4.gz
btmp kern.log syslog.5.gz
ConsoleKit kern.log.0 syslog.6.gz
cups kern.log.1.gz udev
daemon.log kern.log.2.gz unattended-upgrades
daemon.log.0 lastlog user.log
debug lpr.log user.log.0
debug.0 mail.err wpa_supplicant.log
dist-upgrade mail.info wpa_supplicant.log.1.gz
dkms_autoinstaller mail.log wpa_supplicant.log.2.gz
dmesg mail.warn wpa_supplicant.log.3.gz
dmesg.0 messages wpa_supplicant.log.4.gz
dmesg.1.gz messages.0 wpa_supplicant.log.5.gz
dmesg.2.gz messages.1.gz wtmp
dmesg.3.gz messages.2.gz Xorg.0.log
dmesg.4.gz news Xorg.0.log.old
dpkg.log nvidia-installer.log
faillog pycentral.log
-
دقیقا توی crontab چی نوشتین؟
-
این:
00 03 * * * /usr/bin/gwget
یا:
00 03 * * * gwget
حتی این:
00 07 * * * /sbin/shutdown -P now
-
آهان
به صورت پیش فرض cron فایل لاگ تولید نمی کنه. شما باید فایل /etc/syslog.conf
رو ویرایش کنید. علامت # رو از خط زیر بردارید:
#cron.* /var/log/cron.log
که بشه اینجوری:
cron.* /var/log/cron.log
حالا بعد از اجرای crontab لاگ اون در فایل /var/log/cron.log
یا یه همچین آدرسی ذخیره میشه. ببینین که تووی لاگ ها چی می نویسه.
-
برای
/usr/bin/gwget
این به لاگ اضافه شد:May 25 22:29:01 Alinn-Linux /usr/sbin/cron[2927]: (alinn) RELOAD (crontabs/alinn)
May 25 22:29:01 Alinn-Linux /USR/SBIN/CRON[3978]: (alinn) CMD (/usr/bin/gwget)
برای /sbin/shutdown -P now
هم این May 25 22:30:01 Alinn-Linux /usr/sbin/cron[2927]: (alinn) RELOAD (crontabs/alinn)
May 25 22:30:01 Alinn-Linux /USR/SBIN/CRON[4007]: (root) CMD ([ -x /usr/sbin/update-motd ] && /usr/sbin/update-motd 2>/dev/null)
May 25 22:30:01 Alinn-Linux /USR/SBIN/CRON[4021]: (alinn) CMD (/sbin/shutdown -P now)
-
سلام
من یه ویدگت دارم که تغریبا این کارو میکنه :)
(http://www.freeimagehosting.net/uploads/d01e51f326.png)
-
سلام
من یه ویدگت دارم که تغریبا این کارو میکنه :)
(http://www.freeimagehosting.net/uploads/d01e51f326.png)
به crontab که نمیرسه! حالا نتیجه چی شد حل شدنی هست این مشکل؟
-
سلام
باید یوزر من تو فایل /etc/cron.allow (یا یه چیزی تو همین مایه ها) باشه؟ ولی من همچین فایلی ندارم!
-
سلام
/sbin/shutdown -P now
رو با sudo گذاشتم اجرا شد.ولی بقیه همچنان با sudo هم اجرا نمیشن :-X
-
منم ۱ هفته است که دقیقا مشکل Alinn رو دارم. البته من یک کار دیگه هم انجام دادم تو فایل crontab این رو نوشتم:
05 16 * * * gnome-terminal > ~/Desktop/test.log
وقتی ساعت 16:05 میشه هیچ اتفاقی نمیوفته ولی فایل test.log در دسکتاپ درست میشه ولی هیچی توش ننوشته. نمیدونم مشکل از چیه؟
گرچه این تاپیک قدیمیه ولی امیدوارم کسی جواب رو بدونه
-
منم ۱ هفته است که دقیقا مشکل Alinn رو دارم. البته من یک کار دیگه هم انجام دادم تو فایل crontab این رو نوشتم:
05 16 * * * gnome-terminal > ~/Desktop/test.log
وقتی ساعت 16:05 میشه هیچ اتفاقی نمیوفته ولی فایل test.log در دسکتاپ درست میشه ولی هیچی توش ننوشته. نمیدونم مشکل از چیه؟
گرچه این تاپیک قدیمیه ولی امیدوارم کسی جواب رو بدونه
برای خاموش شدن نمی دونم اما برای بقیه کارها این کارو بکنین:
یه فایل متنی باز کنین و اینارو توش بنویسین:
#!/bin/sh
export DISPLAY=:0
gwget
بعد اونو با پسوند sh ذخیره کنین حالا یه جایی بذارش! فرض میکنیم به نام gwget توی /home ه. اینو برای اجرایی کردنش وارد می کنیم:
sudo chmod +x ~/gwget
حالا شما به crontab آدرس این فایلو بدین. مثلا برای همین مورد میشه:
20 03 * * * /home/alinn/gwget
حالا شما اگه می خوای نرم افزار دیگه ای اجرا بشه به جای gwget اونو بذار.
-
منم ۱ هفته است که دقیقا مشکل Alinn رو دارم. البته من یک کار دیگه هم انجام دادم تو فایل crontab این رو نوشتم:
05 16 * * * gnome-terminal > ~/Desktop/test.log
وقتی ساعت 16:05 میشه هیچ اتفاقی نمیوفته ولی فایل test.log در دسکتاپ درست میشه ولی هیچی توش ننوشته. نمیدونم مشکل از چیه؟
گرچه این تاپیک قدیمیه ولی امیدوارم کسی جواب رو بدونه
برای خاموش شدن نمی دونم اما برای بقیه کارها این کارو بکنین:
یه فایل متنی باز کنین و اینارو توش بنویسین:
#!/bin/sh
export DISPLAY=:0
gwget
بعد اونو با پسوند sh ذخیره کنین حالا یه جایی بذارش! فرض میکنیم به نام gwget توی /home ه. اینو برای اجرایی کردنش وارد می کنیم:
sudo chmod +x ~/gwget
حالا شما به crontab آدرس این فایلو بدین. مثلا برای همین مورد میشه:
20 03 * * * /home/alinn/gwget
حالا شما اگه می خوای نرم افزار دیگه ای اجرا بشه به جای gwget اونو بذار.
ممنون مشکل حل شد. ولی به نظر شما چه دلیلی میتونه داشته باشه که cron نتونه مستقیم یک فایل اجرایی رو اجرا کنه؟؟؟
-
ممنون مشکل حل شد. ولی به نظر شما چه دلیلی میتونه داشته باشه که cron نتونه مستقیم یک فایل اجرایی رو اجرا کنه؟؟؟
چطوری حل شد؟
-
ممنون مشکل حل شد. ولی به نظر شما چه دلیلی میتونه داشته باشه که cron نتونه مستقیم یک فایل اجرایی رو اجرا کنه؟؟؟
چطوری حل شد؟
همون طوری که شما لطف کردید فرمودید. برای Shutdown سیستم هم به صورت زیر عمل میکنم:
sudo crontab -e
بعد خط زیر رو به crontab اضافه میکنم:
00 07 * * * /sbin/shutdown -P now
ممنون از کمکی که کردید. در حال حاضر دیگه مشکلی با crontab ندارم
-
ممنون مشکل حل شد. ولی به نظر شما چه دلیلی میتونه داشته باشه که cron نتونه مستقیم یک فایل اجرایی رو اجرا کنه؟؟؟
چطوری حل شد؟
همون طوری که شما لطف کردید فرمودید. برای Shutdown سیستم هم به صورت زیر عمل میکنم:
sudo crontab -e
بعد خط زیر رو به crontab اضافه میکنم:
00 07 * * * /sbin/shutdown -P now
ممنون از کمکی که کردید. در حال حاضر دیگه مشکلی با crontab ندارم
آها! فکر کردم راه دیگه ای بود! برا خاموش شدن هم میشه؟ تا جایی که من می دونم برای اجرای فایل های داخل /sbin دسترسی به روت لازمه.شما این ساهتشو نیم ساعت بعد بذار دیگه عمل نمیکنه. چون شما احتمالا وقتی تست کردید چند دقیقه قبلش پسورد روت رو یه جایی که لازم بوده وارد کردید دیگه اونجا که می خواسته این اسکریپتو اجرا کنه نپرسیده. :-X
-
ممنون مشکل حل شد. ولی به نظر شما چه دلیلی میتونه داشته باشه که cron نتونه مستقیم یک فایل اجرایی رو اجرا کنه؟؟؟
چطوری حل شد؟
همون طوری که شما لطف کردید فرمودید. برای Shutdown سیستم هم به صورت زیر عمل میکنم:
sudo crontab -e
بعد خط زیر رو به crontab اضافه میکنم:
00 07 * * * /sbin/shutdown -P now
ممنون از کمکی که کردید. در حال حاضر دیگه مشکلی با crontab ندارم
آها! فکر کردم راه دیگه ای بود! برا خاموش شدن هم میشه؟ تا جایی که من می دونم برای اجرای فایل های داخل /sbin دسترسی به روت لازمه.شما این ساهتشو نیم ساعت بعد بذار دیگه عمل نمیکنه. چون شما احتمالا وقتی تست کردید چند دقیقه قبلش پسورد روت رو یه جایی که لازم بوده وارد کردید دیگه اونجا که می خواسته این اسکریپتو اجرا کنه نپرسیده. :-X
وقتی با sudo فایل crontab رو تغییر میدی یعنی که دستوری که میذاری مربوط به root میشه بنابراین موقع اجرا از شما پسورد نمیخواد. من این کار کردم و هر روز سر موقع ( ساعات 7 صبح ) بدون در خواست پسورد کامپیوتر خاموش میشه. این دو دستور زیر این کارا رو انجام میدن:
crontab -e # This command change the /var/spool/cron/crontabs/'your user' file
sudo crontab -e # This command change the /var/spool/cron/crontabs/root file
-
مگه crontab روت با crontab کاربر فرق نمی کنه؟ یعنی مگه دو تا crontab جدا نیست؟
-
مگه crontab روت با crontab کاربر فرق نمی کنه؟ یعنی مگه دو تا crontab جدا نیست؟
آره فرق میکنه
crontab کاربر در زیر شاخه
/var/spool/cron/crontabs
با نام خود کاربر قرار دارد ولی crontab که مربوط root میشه در
/var/spool/cron/crontabs
با نام root قرار دارد.
وقتی شما از دستور
sudo crontab -e
استفاده می کنید در واقع فایل crontab که مربوط به root هست رو تغییر میدید ولی وقتی از دستور
crontab -e
استفاده می کنید در واقع فایل crontab کاربر رو تغییر میدید.
-
مگه crontab روت با crontab کاربر فرق نمی کنه؟ یعنی مگه دو تا crontab جدا نیست؟
آره فرق میکنه
crontab کاربر در زیر شاخه
/var/spool/cron/crontabs
با نام خود کاربر قرار دارد ولی crontab که مربوط root میشه در
/var/spool/cron/crontabs
با نام root قرار دارد.
وقتی شما از دستور
sudo crontab -e
استفاده می کنید در واقع فایل crontab که مربوط به root هست رو تغییر میدید ولی وقتی از دستور
crontab -e
استفاده می کنید در واقع فایل crontab کاربر رو تغییر میدید.
خوب اینا قبول! پس وقتی شما crontab روت رو ویرایش می کنی طبیعتا باید با روت وارد سیستم شد نا اونا اجرا بشه. یعنی شما که با یوزر خودت وارد میشی crontab خودت اجرا میشه نه روت:-X
-
وقتی شما از دستور
sudo crontab -e
استفاده می کنید در واقع فایل crontab که مربوط به root هست رو تغییر میدید
فکر میکنم اشتباه میکنید.
شما این دستورات رو بزنید:
sudo echo $USER
sudo echo $UID
sudo echo $HOME
همهٔ چیزایی که چاپ میشه مربوط به کابر خودتون هست نه روت!
برای اینکه crontab روت ویرایش بشه:
sudo -i
crontab -e
خیلی فرق میکنه با:
sudo crontab -e
-
ب
رای اینکه crontab روت ویرایش بشه:
کد:
sudo -i
crontab -e
خیلی فرق میکنه با:
کد:
sudo crontab -e
هر دو تاش crontab روت رو میاره. ولی اولی رو که زدم مثل اینکه برای اولین بار زده باشم ازم پرسید که از چه ادیتوری می خوام استفاده کنم. این دو تا چه فرقی با هم دارن؟
-
وقتی شما از دستور
sudo crontab -e
استفاده می کنید در واقع فایل crontab که مربوط به root هست رو تغییر میدید
فکر میکنم اشتباه میکنید.
شما این دستورات رو بزنید:
sudo echo $USER
sudo echo $UID
sudo echo $HOME
همهٔ چیزایی که چاپ میشه مربوط به کابر خودتون هست نه روت!
برای اینکه crontab روت ویرایش بشه:
sudo -i
crontab -e
خیلی فرق میکنه با:
sudo crontab -e
شما میتونید امتحان کنید. یک بار با sudo crontab -e یک job وارد کن و یک بار هم با crontab -e
بعد لیست job ها رو میتونید با دو دستور زیر چک کنی و ببینی که با هم فرق می کنند
sudo crontab -l
crontab -l
دستورات دیگرو نمیدونم با sudo یا بی sudo چطوری اند ولی این رو میدونم که دستور crontab با sudo و بدون sudo فرق میکنه. در ضمن من الان با همین روش کامپیترمو هر روز خاموش میکنم 8)
برای اینکه crontab روت ویرایش بشه:
کد:
sudo -i
crontab -e
خیلی فرق میکنه با:
کد:
sudo crontab -e
هر دو تاش crontab روت رو میاره. ولی اولی رو که زدم مثل اینکه برای اولین بار زده باشم ازم پرسید که از چه ادیتوری می خوام استفاده کنم. این دو تا چه فرقی با هم دارن؟
حتما یک فرقی دارن شایدم نداشته باشند. :)
خوب اینا قبول! پس وقتی شما crontab روت رو ویرایش می کنی طبیعتا باید با روت وارد سیستم شد نا اونا اجرا بشه. یعنی شما که با یوزر خودت وارد میشی crontab خودت اجرا میشه نه روت:-X
خوب نکته همینه دیگه اگه شما دستوری که نیاز به مجور root داشته باشه با crontab -e وارد کنی اجرا نمیشه ولی اگه با sudo crontab -e وارد کنی یعنی با مجوز روت یک job رو واسه اجرا گذاشتی. اگه این طوری که تو میگی باشه پس موقع بالا اومدن سیستم عامل از تو هی باید پسورد روت رو بپرسه یا مثل mount کردن پارتیشن ها نیاز به مجوز روت است ولی شما فقط با کلیک کردن و بدون مجوز روت میتونید آنها را mount یا umount کنید. یا یک مثال دیگه وقتی میخوای از اینترنت دیسکانکت شی از دستور sudo poff استفاده میکنی ولی وقتی user خودتو تو لیست گروه dip اضافه کنی دیگه نیازی به مجوز روت نیست.
-
:-X پس اون sudo crontab -e برا کاراییه که نیاز به مجوز روت داره نه اینکه اگه کاربر روت وارد شد اون کار براش انجام بشه.درسته؟
-
:-X پس اون sudo crontab -e برا کاراییه که نیاز به مجوز روت داره نه اینکه اگه کاربر روت وارد شد اون کار براش انجام بشه.درسته؟
اره همینطوره :)
-
توی 9.10 کسی crontab رو تست نکرده؟ معمولی که اجرا نمیکنه. با این روشی که قبال هم گفتم بازم اجرا نمیکنه:
یه فایل متنی باز کنین و اینارو توش بنویسین:
کد:
#!/bin/sh
export DISPLAY=:0
gwget
بعد اونو با پسوند sh ذخیره کنین حالا یه جایی بذارش! فرض میکنیم به نام gwget توی /home ه. اینو برای اجرایی کردنش وارد می کنیم:
کد:
sudo chmod +x ~/gwget
حالا شما به crontab آدرس این فایلو بدین. مثلا برای همین مورد میشه:
کد:
20 03 * * * /home/alinn/gwget
حالا شما اگه می خوای نرم افزار دیگه ای اجرا بشه به جای gwget اونو بذار.
چی کار باید بکنم؟
-
به ویکی اضافه شده
اجرای برنامه ها با واسط گرافیکی کاربر در ویکی رو بخون
http://wiki.ubuntu-ir.org/CronHowto
-
به ویکی اضافه شده
اجرای برنامه ها با واسط گرافیکی کاربر در ویکی رو بخون
http://wiki.ubuntu-ir.org/CronHowto
ممنون اما من نگفتم که چطور برنامه ها رو برای اجرای خودکار به کرون بدم :-X مشکل اینه که کرون برنامه هایی که برای اجرا توش میذارم رو اجرا نمیکنه. با اون ترفندی بالا گفتم که تو 9.04 جواب میداد الان اونم جواب نمیده :(
-
به ویکی اضافه شده
اجرای برنامه ها با واسط گرافیکی کاربر در ویکی رو بخون
http://wiki.ubuntu-ir.org/CronHowto
ممنون اما من نگفتم که چطور برنامه ها رو برای اجرای خودکار به کرون بدم :-X مشکل اینه که کرون برنامه هایی که برای اجرا توش میذارم رو اجرا نمیکنه. با اون ترفندی بالا گفتم که تو 9.04 جواب میداد الان اونم جواب نمیده :(
منم متوجه شدم شما چی میگید
اون آخر تو ویکی یک نکته در مورد کارمیک گفتم بخونی مشکلت حل میشه ;)
-
به ویکی اضافه شده
اجرای برنامه ها با واسط گرافیکی کاربر در ویکی رو بخون
http://wiki.ubuntu-ir.org/CronHowto
ممنون اما من نگفتم که چطور برنامه ها رو برای اجرای خودکار به کرون بدم :-X مشکل اینه که کرون برنامه هایی که برای اجرا توش میذارم رو اجرا نمیکنه. با اون ترفندی بالا گفتم که تو 9.04 جواب میداد الان اونم جواب نمیده :(
منم متوجه شدم شما چی میگید
اون آخر تو ویکی یک نکته در مورد کارمیک گفتم بخونی مشکلت حل میشه ;)
حق با شماست :-X من دقت نکردم
ممنونم