İçindekiler
cron nedir?
Cron, Linux / Unix kullanıcılarının belirli bir saat veya tarihte komutları veya komut dosyalarını (komut grupları) otomatik olarak yürütmesini sağlayan programın adıdır. Normalde yedeklemeler gibi yönetimsel görev komutları için kullanılır, ancak herhangi bir şeyi çalıştırmak için kullanılabilir. cron man sayfalarında tanımlandığı gibi; zamanlanmış programları çalıştıran bir arka plan programıdır.
Hemen hemen tüm Linux dağıtımlarında Vixie Cron sürümü, onu geliştiren kişi, Unix'in en büyük gurularından biri olan Paul Vixie, diğer sistemlerin yanı sıra en popüler DNS sunucularından biri olan BIND'in de yaratıcısı tarafından kullanılır. Dünyada.
Cron'u başlat
Cron bir arka plan programıdır (hizmet), yani genellikle aynı sistem önyüklemesiyle yalnızca bir kez başlatılması gerekir. Cron hizmetine crond denir. Çoğu dağıtımda hizmet otomatik olarak yüklenir ve sistem önyüklemesinden başlatılır, birkaç yolla doğrulanabilir:
1) etc / rc.d / init.d / crond durumu 2) /etc/init.d/crond status crond (pid 507) çalışıyor…Servis komutunun kurulu olması durumunda:
hizmet crond durumu
crond (pid 507) çalışıyor…ps komutuyla da incelenebilir:
ps -ef | grep crondherhangi bir nedenle cron çalışmıyorsa, aşağıdakilerle başlayabiliriz:
/etc/rc.d/init.d/crond start Crond'u başlatma: [Tamam][color = rgb (0,0,0)] Servis baştan başlayacak şekilde yapılandırılmamışsa, chkconfig komutuyla eklemek yeterli olacaktır: [/ color]
chkconfig --level 35 crond açıkBununla, sistem açılış zamanında başlaması için seviye 3 ve 5'i çalıştırmak için eklersiniz.
cron kullanma
Cron kullanmanın en az iki farklı yolu vardır:
İlki / etc dizinindedir ve büyük olasılıkla aşağıdaki dizinleri bulacaksınız:
- cron.saatlik
- cron.günlük
- cron.haftalık
- cron.aylık
Komut dosyasının yürütülebilmesi için aşağıdakine benzer bir şey olması gerekir:
#! / bin / sh #yedek cd oluşturan komut dosyası / usr / belgeler tar czf * backup cp backup / other_directory /İlk satırın bash kabuk betiği olduğunu belirten # ! ile başladığını, diğer satırların betiğin yürütmesini istediğimiz komutlar olduğunu düzeltmeliyiz. Bu komut dosyası, örneğin backup.sh olarak adlandırılabilir ve yürütülebilmesi için ilgili izinleri de değiştirmeliyiz, örneğin:
chmod 700 backup.sh ls -l backup.sh -rwx ------ 1 kök kök 0 20 Tem 09:30 backup.shSahibin izin grubundaki (-rwx) "x", yürütülebileceğini gösterir.
Bu betiği cron.hourly içinde bırakırsak, o zaman her gün bir dakika ile her saat başı yürütülür, nedenini daha sonra açıklayacağım.
Cron'u çalıştırmanın veya kullanmanın ikinci yolu, / etc / crontab dosyasını doğrudan değiştirmektir. Çeşitli Linux dağıtımlarının varsayılan kurulumunda bu dosya aşağıdaki gibi görünecektir:
cat / etc / crontab SHELL = / bin / bash PATH = / sbin: / bin: / usr / sbin: / usr / bin MAILTO = root HOME = / # run-parts 01 * * * * root run-parts / etc / cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthlyİlk dört satır, aşağıdakileri gösteren değişkenlerdir:
KABUKCronun altında çalıştığı 'kabuk'tur. Belirtilmezse, cron'u çalıştıran kullanıcıya karşılık gelen / etc / passwd satırında belirtilen varsayılan olarak alınacaktır.
YOLCron'un yürütülecek komutu arayacağı dizinlerin yolunu içerir veya gösterir. Bu yol, sistemin veya kullanıcının global yolundan farklıdır.
POSTA GÖNDERKomutun çıktısının gönderildiği kişidir (çıktısı varsa). Cron, bu değişkende belirtilen kişiye bir e-posta gönderir, yani sistemin veya başka bir sistemin geçerli bir kullanıcısı olmalıdır. Belirtilmezse, cron postayı yürütülmekte olan komutun sahibi olan kullanıcıya gönderir.
EVBu, cron komutunun kök veya ana dizinidir, eğer belirtilmemişse, kök, cron'u çalıştıran kullanıcıya karşılık gelen / etc / passwd dosyasında belirtilen olacaktır.
NS yorumlar # ile belirtilir satırın başında.
Yukarıdakilerden sonra, uygun şekilde zamanlanmış görevleri yürüten satırlar gelir. Her satırda bir tane olmak üzere kaç görev olabileceği konusunda bir sınır yoktur. Alanlar (Onlar 7) bu satırları oluşturan aşağıdaki gibi oluşturulur:
Dakika Saat DayOfMonth Ay DayOf Week Kullanıcı Komutu
- Tarla: Tanım
- Dakika: Komutun yürütüleceği saatin dakikasını kontrol eder, bu değer 0 ile 59 arasında olmalıdır.
- Zaman: Komutun yürütüleceği zamanı kontrol eder, 24 saat formatında belirtilir, değerler 0 ile 23 arasında olmalıdır, 0 gece yarısıdır.
- Ayın günü: Komutu yürütmek istediğiniz ayın günü. Örneğin, komutun ayın 20'sinde yürütülmesi için 20 belirtilir.
- Ay: Komutun yürütüleceği ay, sayısal olarak (1-12) veya ayın adıyla İngilizce olarak, yalnızca ilk üç harfle belirtilebilir.
- Hafta içi: Komutun yürütüleceği haftanın günü, sayısal (0-7) veya günün adıyla İngilizce, sadece ilk üç harf olabilir. (0 ve 7 = Pazar)
- kullanıcı: Komutu yürüten kullanıcı.
- Emretmek: Çalıştırmak istediğiniz komut, komut dosyası veya program. Bu alan birden fazla kelime ve boşluk içerebilir.
İlk 5 alanı ve yıldız işaretini daha iyi anlamak için birkaç örnek kullanacağım:
Örnek:
Açıklama 01 * * * * Her günün her saatinin 1 dakikasında çalışır 158 * * * Sabah 8:15'te. her gün 15 20 * * * 20:15'te. her gün 00 5 * * 0 Sabah 5'te. her Pazar * 5 * * Güneş Her dakika 05:00'den itibaren 5:59'da her Pazar 45 19 1 * * 19:45'te. Her ayın 1'i 01 * 20 7 * 20 Temmuz'da her saatin 1 dakikasında 10 1 * 12 1 01:10'da. Aralık ayında her Pazartesi 00 12 16 * Çar Her ayın 16'sında öğlen ve yani Çarşamba 30 9 20 7 4 Sabah 9:30'da. 20 Temmuz ve bu Perşembe 30 9 20 7 * Sabah 9:30'da. 20 Temmuz'dan itibaren haftanın gününe bakılmaksızın 20 * * * 6 Cumartesi günleri her saatin 20. dakikasına 20 * * 1 6 Ocak Cumartesi günleri her saatin 20. dakikasına kadarAlanlarda listeler belirtmek de mümkündür. Listeler 1,2,3,4 veya aynı olacak şekilde 1-4 şeklinde olabilir. Cron da aynı şekilde aşağıdaki gibi belirtilen listelerdeki artışları destekler:
Değer veya liste / artışYine, örneklerle listeler ve artışlar daha kolay anlaşılır:
Örnek:
Açıklama 59 11 * 1-3 1,2,3,4,5 11:59'da Pazartesi-Cuma, Ocak-Mart 45 * 10-25 * 6-7 Tüm ayların 10'undan 25'ine kadar tüm saatlerin 45 dakikasında ve günün Cumartesi veya Pazar olduğu 10,30,50 * * * 1,3,5 Pazartesi, Çarşamba ve Cuma günleri tüm saatlerin 10, 30 ve 50 dakikalarında * / 15 10-14 * * * Sabah 10:00'dan itibaren her on beş dakikada bir saat 2:00'de * 12 1-10 / 2 2,8 * Şubat ve Ağustos aylarının 1,3,5,7 ve 9 günlerinde saat 12'nin tüm dakikaları. (Üçüncü alandaki artış 2'dir ve 1'den başlar) 0 * / 5 1-10,15,20-23 * 3 Her ayın 1. ila 10. günleri, 15. günleri ve 20 ila 23. günleri arasında 5 saatte bir ve günün Çarşamba olduğunu 3/3 2/4 2 2 2 2,6,10, vb. 3. dakikadan (3,6,9 vb.) başlayarak her 3 dakikada bir (2. saatten başlayarak her 4 saatte bir) 2 Şubat'ta ve bu SalıSon örnekte görüldüğü gibi o satıra o veri ile atanan cron görevi ancak 5 alan (AND) karşılanırsa yürütülür. Yani görevin çalışması için 2 Şubat Salı günü saat 02:03'te olması gerekiyor. Yalnızca belirli bir dakika içinde 5 alanın tümü doğruysa true değerini döndüren her zaman bir Boolean AND'dir.
[color = rgb (0,0,0)] Önceki durum şunu açıkça ortaya koyuyor: [/ color]
Cron programı her dakika çağrılır ve alanlarının yerine getirdiği görevleri tam o dakika içinde yürütür.
Kullanıcı alanı ve komut dahil olmak üzere, crontab satırları aşağıdaki gibi olabilir:
0 22 * * * root /usr/daily backup.sh 0 23 * * 5 root /usr/weekly backup.sh 0 8.20 * * * jcarrillo mail -s "sistem çalışıyor" [email protected]İlk iki satır kök kullanıcı tarafından yürütülür ve ilk satır, günlük yedekleme oluşturan komut dosyasını her gün 22:00'de yürütür. İkincisi, her Cuma saat 23:00'te haftalık yedekleme oluşturan bir komut dosyası yürütür. Üçüncü satır sergio kullanıcısı tarafından yürütülür ve her gün sabah 8'de ve gece 8'de yürütülür ve komut [email protected] hesabına "sistem çalışıyor" konulu bir e-posta göndermektir, bir yöneticinin, belirtilen zamanlarda uzaktaki bir sistemin etkin olduğunu bilmesinin bir yolu, ancak o zamanlarda bir e-posta almıyorsa, bir sorun var demektir.
kök olmak, o zaman mümkün, doğrudan crontab'ı değiştir:
vim / etc / crontabBu doğrudan değiştirilir.
Cron'u birden fazla kullanıcıyla çalıştırma, crontab komutu
Linux çok kullanıcılı bir sistemdir ve cron, aynı anda birkaç kullanıcıyla çalışmayı destekleyen uygulamalardan biridir. Her kullanıcının kendi crontab dosyası olabilir, aslında / etc / crontab'ın kök kullanıcının crontab dosyası olduğu varsayılır, ancak diğer kullanıcıların dahil edilmesinde bir sorun yoktur ve dolayısıyla kullanıcının tam olarak kim olduğunu gösteren altıncı alan. hangi görevi yürütür ve aşağıdakiler için gereklidir:
/ etc / crontab
Ama normal kullanıcılar (ve hatta kök) kendi crontab dosyasını oluşturmak istersek, crontab komutu.
/ var / spool / cron dizininde (dağılıma göre değişiklik gösterebilir), her kullanıcı için bir cron dosyası oluşturulur, bu dosya metin olmasına rağmen doğrudan düzenlenmemelidir.
Ardından, komutla doğrudan crontab dosyasını oluşturan iki durum vardır:
crontab -eVarsayılan düzenleyicinin (genellikle vi) boş crontab adlı dosya ile açılacağı ve kullanıcının görev tablosuna gireceği ve otomatik olarak / var / spool / cron / kullanıcı olarak kaydedileceği yerdir.
Diğer durum, kullanıcının görevlerin girişleriyle birlikte normal bir metin dosyasını düzenlemesi ve örnek olarak onu 'my_cron' olarak adlandırması, ardından $> crontab my_cron komutu, onu / var'da kullanıcının cron dosyası olarak oluşturmaktan sorumlu olacaktır. / biriktirme / cron / kullanıcı:
vi my_cron # paylaşılan klasörden dosyaları siler 0 20 * * * rm -f / home / sergio / paylaşılan / * # her ayın ilk günü belgeler klasörünün yedeğini alan bir komut dosyası yürütür 0 22 1 * * / home / sergio / aylık support.sh # Pzt'den Cuma'ya kadar her 5 saatte bir, evimde izinlerin doğru olduğundan emin oluyor 1 * 5 * * 1-5 chmod -R 640 / home / sergio / *: wq ( file)> ls my_cron> crontab my_cron (/var/spool/cron/user olarak ayarlayın)Yukarıdakileri özetleyerek ve diğer seçenekleri göz önünde bulundurarak crontab:
crontab file.cron (file.cron'u kullanıcının crontab'ı olarak ayarlar) crontab -e (crontab dosyasının oluşturulabileceği veya düzenlenebileceği ön ayar düzenleyiciyi açar) crontab -l (kullanıcının mevcut crontab'ını, cron işlerini listeler) crontab -r (kullanıcının mevcut crontab'ını kaldırır)Bazı dağıtımlarda, normal kullanıcı crontab'larını düzenlerken, / var / spool / cron içindeki crontab dosyalarının yeniden okunabilmesi için hizmeti yeniden başlatmak gerekir.
hizmet crond yeniden başlatmaHizmetlerin nasıl başlatılacağını / durdurulacağını / yeniden başlatılacağını daha iyi anlamak için bu makalede daha fazla bilgi bulacaksınız.
Cron'a erişimi kontrol etme
Cron, hangi kullanıcıların cron hizmetlerini kullanıp kullanamayacağını kontrol etmenizi sağlar. Bu, aşağıdaki dosyalar aracılığıyla çok basit bir şekilde elde edilir:
- /etc/cron.allow
- /etc/cron.deny
echo ALL >> / etc / cron.deny veya cron.allow'a başka bir kullanıcı eklemek için echo juan >> / etc / cron.allowNe cron.allow dosyası ne de cron.deny dosyası mevcut değilse, teoride cron kullanımı kullanıcı kısıtlaması olmadan gerçekleşir. Bir cron.deny dosyası oluşturmadan cron.allow'a kullanıcı adları eklemek, onu ALL kelimesiyle oluşturmakla aynı etkiye sahip olacaktır. Bu, tek bir kullanıcı ile cron.allow oluşturulduktan sonra, cron kullanmak isteyen diğer kullanıcıların her zaman bu dosyada belirtilmesi gerektiği anlamına gelir.
SonuçlarÇalışması hakkında konuştuk, umarım anlamışsınızdır, Red Hat gibi bazı dağıtımlar anacron gibi bazı cron eksikliklerini giderebilecek bir varyant içerir, buna rağmen en temelden en gelişmişe kadar her seviyede cron kullanılır. , çalışmasının anlaşılması tavsiye edilir . Herhangi bir sorunuz varsa veya bir öneriniz varsa, yorumlarda belirtmekten çekinmeyin.Bu Eğitimi beğendiniz ve yardım ettiniz mi?Yazara olumlu puan vermek için bu düğmeye basarak yazarı ödüllendirebilirsiniz.