Cron & crontab, açıkladı

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.

İlgili makale:
Eğitim: .tar.gz ve .tar.bz2 Paketlerini Yükleme

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!"

İlgili makale:
Sistemi tanıma komutları (donanımı ve bazı yazılım yapılandırmalarını tanımlayın)

Ö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:

Teşekkürler Lucain!

Makalenin içeriği şu ilkelerimize uygundur editoryal etik. Bir hata bildirmek için tıklayın burada.

48 yorum, sizinkini bırakın

Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.

  1.   Alvaro Ortiz bilgi alanı resmi dijo

    Ugh… biraz kafa karıştırıcı.

  2.   tonik dijo

    * / 30, her 30 dakikada bir çalışan eksik (dakika alanında) ...

    1.    erm3nda dijo

      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.

      1.    kika dijo

        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.

    2.    kika dijo

      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.

  3.   Gevşeklik dijo

    Merhaba, cron'un nasıl çalıştığını açıklığa kavuşturacak bilgiler çok faydalı.
    Bytes

  4.   Gevşeklik dijo

    için *

  5.   Avcı dijo

    Mükemmel, cron'un nasıl çalıştığını açıkladığınız için teşekkürler .. biraz yardım edelim 🙂

  6.   Jacob dijo

    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

  7.   Agustin dijo

    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!

  8.   hadi linux kullanalım dijo

    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.

  9.   Jonathan dijo

    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

    1.    hadi linux kullanalım dijo

      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.

  10.   patretca dijo

    Katkı takdir edilmektedir.

    10 puan !!

    salu2 !!

  11.   Rodolfo dijo

    Ç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.

  12.   Jahir dijo

    adamım çok teşekkür ederim, örnekleri okuyup test ediyorum. çok teşekkür ederim ... çok anlaşılır. Şerefe

  13.   Geovanni dijo

    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.

  14.   Sebastian dijo

    Mükemmel, çok kullanışlı !!!

  15.   mmm dijo

    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

  16.   Miguel dijo

    "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ı.

  17.   Oscar dijo

    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

  18.   Oskar dijo

    Bunun değişiklik geçmişini kontrol etmek istiyorum

    nasıl yapabilirim

    teşekkürler

  19.   Andres Ledo dijo

    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.

    1.    hadi linux kullanalım dijo

      Öyle. Teşekkür ederim!
      Sarıl! Paul

  20.   Cebrail dijo

    Her çalıştırıldığında saati, dizini vb. Belirtebilmek için bir cron dosyasının nasıl oluşturulacağını bilmek istiyorum.

  21.   valentin dijo

    İşlemi ve cron'un temel komutlarını açıkladığınız için teşekkürler, şimdi kendinizi biraz eğlendirmek için.

  22.   Sander dijo

    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

    1.    hadi linux kullanalım dijo

      Teşekkürler Sander! Sarılmak! Paul.

  23.   Daryo dijo

    dom = ayın günü
    dow = haftanın günü
    ilişkilendirirsen daha kolay

  24.   Pascual dijo

    Çok teşekkür ederim, eksiksiz ve iyi anlatılmış.

  25.   maksiller dijo

    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.-.

  26.   Marcelo dijo

    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.

    1.    hadi linux kullanalım dijo

      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.

  27.   aj dijo

    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

    1.    david dijo

      Bana eklemek istediğiniz her şeyi 'echo' kullanabilirsin '| kedi >> 'cronotab yolu (/ etc / cronotab)' «

  28.   Rafael Vera dijo

    Bir ifade 3 günde bir tam olarak nasıl çalışır?

  29.   José Antonio dijo

    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ı?

    1.    Fredd dijo

      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.

  30.   LA3 dijo

    Crond'u yeniden başlatmam gerektiğini bilmiyordum, bununla bir süredir mücadele ediyordum

  31.   kenia dijo

    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 ..

  32.   İsa dijo

    iyi günler!!

    Crontab'da yürütülen işlemi nasıl durdururum?

  33.   İsa dijo

    süreç * …………

  34.   Julianna dijo

    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

  35.   Anthox dijo

    Ayın son günü (31-30-28 günler) nasıl bir görev çalıştırırsınız?

  36.   Tfercho dijo

    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?

  37.   soymak dijo

    Ve eğer durdurmak istersem?

  38.   Kayıt dijo

    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.

  39.   Ferqos dijo

    çok teşekkür ederim