Lukain halka açık bir süre önce cron ve crontab hakkında mükemmel eğitim paylaşmaya değer olduğunu düşünüyorum. Cron, Windows'taki Zamanlanmış Görevler ile eşdeğerdir, sadece terminalden idare edilir. Aynı hedefe ulaşmak için görsel bir arayüz tercih edenler bunu görebilir. Başka bir öğe. |
Cron nedir?
Cron adı, "zaman" anlamına gelen Yunanca kronodan gelmektedir. Unix işletim sisteminde cron, süreçleri veya komut dosyalarını düzenli aralıklarla (örneğin, her dakika, gün, hafta veya ay) çalıştıran normal bir arka plan işlem yöneticisidir (arka plan programı). Yürütülmesi gereken işlemler ve yürütülmeleri gereken saatler crontab dosyasında belirtilir.
Cómo funciona
Cron arka plan programı, /etc/rc.d/ o /etc/init.d dağıtıma bağlı olarak. Cron arka planda çalışır, crontab görev tablosunu her dakika kontrol eder / Etc / crontab'ın içinde / var / spool / cron başarılması gereken görevlerin peşinde. Bir kullanıcı olarak, bazı işlemleri otomatikleştirmek için cron'a görevler içeren komutlar veya betikler ekleyebiliriz. Bu, örneğin bir sistemin veya iyi bir yedekleme sisteminin güncellemesini otomatikleştirmek için kullanışlıdır.
Crontab nedir?
Crontab, kullanıcı tarafından belirtilen bir zamanda yürütülecek komutların bir listesini saklayan basit bir metin dosyasıdır. Crontab, komut dosyasının veya komutun çalıştırılması gereken tarih ve saati, yürütme izinlerini kontrol edecek ve arka planda yapacaktır. Her kullanıcının kendi crontab dosyası olabilir, aslında / Etc / crontab'ın normal kullanıcılar (ve hatta root) kendi crontab dosyalarını oluşturmak istediklerinde, kök kullanıcının crontab dosyası olduğu varsayılır, o zaman crontab komutunu kullanacağız.
Crontab, çok kullanıcılı sistemlerde, basit bir sistem kullanıcısı veya kök kullanıcı olarak cron görevlerini yönetmenin en kolay yoludur.
Crontab kullanma
Basit bir örnekle başlıyoruz.
Can sıkıcı "Her zaman güncellemem gerekiyor ve bundan hoşlanmıyorum!"
Öncelikle bir senaryo yapacağız. Bu komut dosyası cron tarafından çağrılacak ve yapmasını istediğimiz tüm talimatları içerecektir, bu nedenle, cron'a dahil etmeden önce birkaç durumda ve birkaç şekilde test etmek gerekir, bunun gibi basit bir güncelleme betiği:
#! / bin / bash #script güncelleme örneği # dağıtımınızı seçin # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu
Dağıtım satırınızdan # öğesini kaldırın. Ubuntu / Debian olması durumunda apt-get ile başlar.
Betiği update.sh olarak kaydederiz (örneğin, evinizin betikleri dizini). Söz konusu betiğin yürütme izinlerini şu şekilde değiştiriyoruz:
chmod a + x ~ / scripts / update.sh
Her şeyin sorunsuz çalıştığını doğrulamak için betiği birkaç kez çalıştırıyoruz, gerekli olanı değiştiriyoruz (hata içermemelidir, aksi takdirde cron yalnızca bir hatayı defalarca tekrarlayacaktır). Şimdi görevi crontab'ımıza eklemek için.
Crontab'e görevler ekleyin
Crontab'ın sürümünü crontab -e ile çalıştırıyoruz, bazı dağıtımlarda (Ubuntu gibi) bize istediğimiz metin düzenleyiciyi seçme seçeneği veriyor, gerisi vi ile kalıyor. Crontab dosyası şuna benzer.
# mh dom mon dow kullanıcı komutu
burada:
- m betiğin çalıştırılacağı dakikaya karşılık gelir, değer 0 ile 59 arasındadır
- h tam zaman, 24 saatlik format işlenir, değerler 0 ile 23 arasındadır ve 0 gece yarısı 12:00 şeklindedir.
- hediye ayın gününü ifade eder, örneğin 15 günde bir çalıştırmak istiyorsanız 15 belirtebilirsiniz
- dow haftanın günü anlamına gelir, sayısal (0 ila 7, burada 0 ve 7 Pazar) veya günün ilk 3 harfi İngilizce olabilir: mon, tue, wed, thu, fri, sat, sun.
- kullanıcı Komutu çalıştıracak kullanıcıyı, komut dosyasını yürütme izinlerine sahip olduğu sürece root veya farklı bir kullanıcı olabilir.
- komuta komutun yürütülecek mutlak yolunu veya komutunu ifade eder, örneğin: /home/usuario/scripts/update.sh, eğer bir komut dosyasını çağırırsa çalıştırılabilir olmalıdır
Açık olmak gerekirse birkaç cron görevi örneği açıklanmıştır:
15 10 * * * user /home/user/scripts/update.sh
Update.sh komut dosyasını her gün 10: 15'te çalıştıracaktır.
15 22 * * * user /home/user/scripts/update.sh
Update.sh komut dosyasını her gün 10: 15'te çalıştıracaktır.
00 10 * * 0 root apt-get -y update Root kullanıcısı
Her Pazar saat 10: 00'da güncelleme yapacak
45 10 * * sun root apt-get -y güncellemesi
Kök kullanıcı her Pazar (Paz) saat 10: 45'te bir güncelleme çalıştıracaktır.
30 7 20 11 * kullanıcı /home/usuario/scripts/updata.sh
20 Kasım saat 7: 30'da kullanıcı komut dosyasını çalıştıracak
30 7 11 11 güneş kullanıcısı /home/usuario/scripts/pastel_con_velitas.sh
11 Kasım sabah 7: 30'da ve bu Pazar günü, kullanıcı sistem yöneticisini (yani beni) kutlayacak
01 * * * * kullanıcı /home/usuario/scripts/molestorecordatorio.sh
Her gün her saatin her dakikası can sıkıcı bir hatırlatma (ÖNERİLMEZ).
Hala ele alınabilir özel aralıklar:
30 17 * * 1,2,3,4,5
Pazartesiden cumaya her gün öğleden sonra 5: 30'da.
00 12 1,15,28 * *
Her ayın ilk, on beşinci ve 12'inde öğlen 28'de (maaş bordrosu için ideal)
Bu kafa karıştırıcıysa, crontab kolları bu aralıkları tanımlamak için özel dizeler.
@reboot Başlangıçta bir kez çalıştır
@yearly yılda yalnızca bir kez çalışır: 0 0 1 1 *
@yearly ile yıllık olarak aynı
@monthly ayda bir çalışır, ilk gün: 0 0 1 * *
@weekly Weekly Haftanın ilk saatinin ilk dakikası. 0 0 * * 0 ″.
@ günlük olarak, 12:00 A.M. 0 0 * * *
@midnight @daily ile aynı
@Her saat her saatin ilk dakikasında: 0 * * * *
Kullanımı çok basittir.
@hourly user /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y yükseltme
Sonuncu ama bir o kadar önemli:
Cron iş yönetimi
crontab dosyası
Mevcut crontab dosyasını kullanıcı tanımlı bir dosyayla değiştirin
crontab -e
Kullanıcının crontab dosyasını düzenleyin, her yeni satır yeni bir crontab görevi olacaktır.
crontab -l
Kullanıcının tüm crontab görevlerini listeleyin
crontab-d
Kullanıcının crontab dosyasını silin
crontab -c dizini
Kullanıcının crontab dizinini tanımlar (bu, kullanıcının yazma ve yürütme izinlerine sahip olmalıdır)
crontab -u kullanıcısı
başka bir kullanıcının crontab'ını işlemek için önek, örnekler:
$ sudo crontab -l -u root $ sudo crontab -e kullanıcı2 #crontab -d -u kullanıcı
Bu araç, diğerleri gibi, daha derinlemesine ve daha ayrıntılı olarak şu konumlarda görülebilir:
48 yorum, sizinkini bırakın
Ugh… biraz kafa karıştırıcı.
* / 30, her 30 dakikada bir çalışan eksik (dakika alanında) ...
Sadece bu yorumları gözden geçirmeye karar verene kadar yorum yapacağım 😀
Bu değiştirici çok önemli bir bilgi parçasıdır ve çok faydalı bir şeydir.
Merhaba!
Şu anda her 45 dakikada bir yapılandırmayı test ediyorum.
* / 45 * * * * ve komut her saat 45 dakikada VE her saatte yürütülür. Demek ki:
3:45, sonra 4:00, 4:45, sonra 5:00, 5:45, 6:00, 6:45 ve benzerlerinde çalışır.
Yanlış bir şeyim var Ne yapabilirim ki sadece 45 dakikada bir veya en az saatte bir 45 dakikada bir olsun.
Merhaba!
Şu anda her 45 dakikada bir yapılandırmayı test ediyorum.
* / 45 * * * * ve komut her saat 45 dakikada VE her saatte yürütülür. Demek ki:
3:45, sonra 4:00, 4:45, sonra 5:00, 5:45, 6:00, 6:45 ve benzerlerinde çalışır.
Yanlış bir şeyim var Ne yapabilirim ki sadece 45 dakikada bir veya en az saatte bir 45 dakikada bir olsun.
Merhaba, cron'un nasıl çalıştığını açıklığa kavuşturacak bilgiler çok faydalı.
Bytes
için *
Mükemmel, cron'un nasıl çalıştığını açıkladığınız için teşekkürler .. biraz yardım edelim 🙂
Anladığım kadarıyla bu satır 10: 15'te uygulanacak, yanılıyorsam düzeltin
İşte orada 10:15 diyor
15 22 * * * user /home/user/scripts/update.sh
Merhaba! çok iyi bilgi.
Her yarım saatte bir Komut Dosyası çalıştırmak için, CronTab'a eklenmesi gereken satır şu olacaktır: "30 * * * * root Scrip.sh" Doğru mu? Çok teşekkür ederim!
Hayır. Doğru hatırlıyorsam, bunun için / 30 * * * * root Scrip.sh koymalısınız.
Yani, 30'dan önce / ekleyin.
Şerefe! Paul.
Merhaba, gönderinizi beğendim, çok tamamlandı ama size bir şey sormak istedim.
Bu komutla ilgili sorunlar yaşıyorum ve "at" gibi bir komut.
Belirli bir zamanda bir komut dosyası çalıştırmak ve
-f /home/mi_user/Desk/script.sh 18:08 adresinde örnek
ve komut dosyası ekranda yürütülmez, yani terminalde, arka planda yürütülür mü?
Ve cron ile aynı şey bana da oluyor, crontab dosyasını "crontab -e" ile düzenliyorum
sonunda bu satırı ekliyorum:
46 19 my_user /home/mi_user/Desk/script.sh
ve hiçbir şey yapmaz, senaryoyu göstermez.
Herhangi bir öneri? Çok teşekkür ederim ve herhangi bir rahatsızlıktan dolayı özür dilerim
Terminalin görünmesi için, terminali çalıştırmanız ve komut dosyasını bir parametre olarak iletmeniz gerekebilir.
Örnek:
lxterminal -e "my_user /home/my_user/Desk/script.sh"
Kullanılacak parametre, kullandığınız terminal öykünücüsüne göre değişebilir.
Umarım işe yarar.
Sarıl! Paul.
Katkı takdir edilmektedir.
10 puan !!
merhaba2 !!
Çok teşekkür ederim, bazı şeyleri netleştirmeme çok yardımcı oldu, toplam teşekkürler, daha fazla ayrıntı veya şüphe için MAN SAYFASINA gideceğim, tekrar tekrar selamlar.
adamım çok teşekkür ederim, örnekleri okuyup test ediyorum. çok teşekkür ederim ... çok anlaşılır. Şerefe
Kullanıcı işlerinin listesini silmek için ubuntu Sunucusu 12.04.2 LTS'yi ve sahip olduğum crontab sürümünü kullandım, crontab -r (ve bu kılavuzun dediği gibi -l). Elbette sürümler sorusuyla.
Öte yandan, bir zamanlar sadece crontab çalıştırdım ve bu tür kendi yürütme dosyamı oluşturmama izin verdi, ancak bu yürütülen dosya değildi. Çalıştırılan, / etc / crontab içindeki olandır. belki birisi yorumu kullanır.
PS (locate and whereis crontab ile aradım, ancak yalnızca yukarıda belirtilen adresi ve şifrelenmiş başka bir dosyayı döndürdü, bu nedenle, çalıştırılan / etc / crontab içindeki biriyse, ancak crontab -e komutunu çalıştırırken, benimki göründü tanımladığım tüm işler ile) bu dosya nerede saklanıyordu '???? Saygılarımızla. Her zaman root ile giriş yaparım.
Mükemmel, çok kullanışlı !!!
Merhaba, bunu yapmak istiyorum ………… «15 10 * * * root ifdown eth0»
yani ağ kartı belli bir zamanda kapandı ………… iyi, crontab'a koydum ve işe yaramadı …… .. naber?
Saludos y gracias
"Crontab'a görev ekle" başlığından sonra "mon" tanımlamayı kaçırdınız
Makale hala güzel, cron son derece kullanışlı.
Bu güzel gönderi ne kadar güzeldi, sor bana
Görevlerin yerine getirilmesinin bıraktığı kayıtları takip etmek istersem, nerede görebilirim?
is decdir Bu dosyanın geçmişinde yapılan işlemlerin geçmişini görmek istiyorum ve onu kimin değiştirdiğini ve tarihini görmek istiyorum
teşekkürler
Bunun değişiklik geçmişini kontrol etmek istiyorum
nasıl yapabilirim
teşekkürler
Günaydın,
Sanırım ubuntu betiğinde bir hata yaptınız, apt-get -y upgrade yerine ap-get -y upgrade'i koydunuz. (Bir t bıraktınız).
Bir tebrik.
Öyle. Teşekkür ederim!
Sarıl! Paul
Her çalıştırıldığında saati, dizini vb. Belirtebilmek için bir cron dosyasının nasıl oluşturulacağını bilmek istiyorum.
İşlemi ve cron'un temel komutlarını açıkladığınız için teşekkürler, şimdi kendinizi biraz eğlendirmek için.
Gnu / Linux ile ilgili herhangi bir konuda bilgi aradığımda, bu harika topluluktaki vakaların% 90'ında her zaman en iyi öğreticiyi bulmak için etrafta dolanırım, sanırım bundan sonra buradan ve sonra başka bir yerden başlayacağım.
selamlar
Teşekkürler Sander! Sarılmak! Paul.
dom = ayın günü
dow = haftanın günü
ilişkilendirirsen daha kolay
Çok teşekkür ederim, eksiksiz ve iyi anlatılmış.
Bu, İşletim Sistemleri öğretmenimin bize verdiği şeyin aynısı, hiçbir şeyi değiştirmiyorum, şimdi sınıfın neden bu kadar kötü olduğunu anlıyorum.-.
Tahmini,
Sorgu, bir görevin süresi sınırlandırılabilir mi?
Örneğin, her 5 dakikada bir tekrarlanan bir görevim var, bu görev hala aktifse, onu sonlandırın ve tekrar çalıştırın.
Teşekkürler,
Marcelo.
Merhaba Marcelo!
Bu soruyu soru cevap servisimiz adında sorarsanız daha iyi olacağını düşünüyorum. Linux'tan Sor Böylece tüm topluluk size sorununuz konusunda yardımcı olabilir.
Sarıl, Pablo.
iyi yazı.
Crontab'a görev eklemek için terminal başına komut nedir (crontab'a girmeden ve bunları manuel olarak 'crontab -e' ile eklemeden veya crontab'ı 'crontab dosyası' ile başka bir crontab ile değiştirmeden).
Buradaki fikir, görevleri crontab'a eklemek için harici bir komut dosyası oluşturmaktır.
teşekkürler
Bana eklemek istediğiniz her şeyi 'echo' kullanabilirsin '| kedi >> 'cronotab yolu (/ etc / cronotab)' «
Bir ifade 3 günde bir tam olarak nasıl çalışır?
Merhaba.
Bir cron işini yürütürken sorun yaşıyorum.
Aşağıdaki görevi cronta -e ile çalıştırıyorum:
01 * * * * root /home/user/script/mfile.sh
ama görev bitmedi. Myfile.sh dosyasının yürütme iznine sahip olduğunu ve onu yürüten kullanıcının root olduğunu kontrol ettim.
Aynı görevi / etc / crontab içinde çalıştırıyorum ve servisi yeniden başlattıktan sonra benim için de çalışmıyor.
Myfile.sh dosyasının içeriği bir DB'yi güncelleyen bir komuttur ve eğer onu konsolda çalıştırırsam çalışır.
sorunun ne olabileceği hakkında bir fikriniz var mı?
Veritabanı kullanıcısı tüm izinlere sahip olmayabilir ve önce ortam değişkenlerini veritabanı motorunuzdan dışa aktarmanız gerekir.
Örneğin db2'de bu satır betiğin başına gider
. / home / db2inst1 / sqllib / db2profile
Başka bir neden, komut dosyasının veritabanına bağlantı gerektirmesi, komut dosyası içindeki veritabanına bağlantı kurması olabilir.
Crond'u yeniden başlatmam gerektiğini bilmiyordum, bununla bir süredir mücadele ediyordum
Görevin her ayın sonunda, belirtilen saatte çalıştırıldığını nasıl belirteceklerini bilecekler .. ayrıntı şu ki, her ayın son gününü aldığını nasıl bildiğimi başaramıyorum .. ?? Bunları tek tek yazmak zorunda kaldım ama Şubat ayının sonu geldiğinde bisiesto olması benim için karmaşık hale geliyor ..
iyi günler!!
Crontab'da yürütülen işlemi nasıl durdururum?
süreç * …………
Bana yardım edebilir misin? eu tenho um betiği minha tarafından yazılmıştır ve crontab çalışmaz! Jб dei tüm izinleri, onu çalıştırabilen belirli bir cron veya kullanıcı değil - çoğu durumda hiçbir şey olmaz! Bana yardım edip edemeyeceğinizi bilmek isterim, diğer bazı şeyler işe yaramaz! Vlws
Ayın son günü (31-30-28 günler) nasıl bir görev çalıştırırsınız?
Bildiğiniz gibi, su komutu bir konsolda kullanıcıyı değiştirmek için kullanılır. Su komutunu şu şekilde kullanırsam: "kullanıcınız" kullanıcıyı değiştir, ancak "kullanıcı" nın uygun ayarları olmadan, su olarak çalıştırırsam: "su - kullanıcı" kullanıcı ayarlarını yükleyerek kullanıcıyı değiştir. Cron ile kullanıcıyı belirtirim, ancak bu kullanıcının yapılandırmalarını nasıl yüklerim?
Ve eğer durdurmak istersem?
Merhaba,
Neyi yanlış yaptığımı bilmiyorum ama adımları takip ediyorum ve hiçbir şey uygulanmıyor. Denedim:
59 * * * * / usr / bin / gedit
* * * * * / usr / bin / gedit
* * * * * root / usr / bin / gedit
* * * * * usr / bin / test.sh
* * * * * root usr / bin / test.sh
ve hiçbir şey. Hiçbir şey yürütmez. Yeniden başlattım ve her şey.
çok teşekkür ederim