Her gün gece yarısı bir senaryo çalıştıracak bir cron nasıl yazılır?


144

Crontab'ın iyi bir seçim olduğunu duydum, ama satırı nasıl yazarım ve sunucuya nereye koyabilirim?

Yanıtlar:


261

İşte crontab'ın ne olduğu ve Ubuntu'da nasıl kullanılacağı hakkında iyi bir öğretici . Crontab satırınız şöyle görünecektir:

00 00 * * * ruby path/to/your/script.rb

( 00 00gece yarısı - 0 dakika ve 0 saat - ve *s her ayın her günü anlamına gelir.)

Sözdizimi: 
  mm ss dd mt wd komutu

  mm dakika 0-59
  ss saati 0-23
  1-31 ayın dd günü
  mt ay 1-12
  0-7. haftanın wd günü (Pazar = 0 veya 7)
  komut: ne çalıştırmak istiyorsun
  tüm sayısal değerler * ile değiştirilebilir.

1
'Kullanıcı olarak çalıştır' sütununu kaçırmıyor musunuz?
Lucas Cimon

4
@LucasCimon /etc/crontab(Ubuntu'da) kullanıcı sütununa (komuttan önce gelir) izin verilir , ancak çalıştırdığınızda crontab -ebu sütuna izin vermeyen kullanıcıya özgü bir crontab düzenlersiniz. IIRC Ubuntu /etc/crontab, üzerine yazılabileceğinden manuel olarak çıkmayı önler . Buraya bakın: stackoverflow.com/questions/8475694/…
Ürdün

@Jordan yani kök için crontab cevabısudo crotab -u root -e
dashesy

40

adam sayfasından

linux$ man -S 5 crontab

   cron(8) examines cron entries once every minute.

   The time and date fields are:

          field          allowed values
          -----          --------------
          minute         0-59
          hour           0-23
          day of month   1-31
          month          1-12 (or names, see below)
          day of week    0-7 (0 or 7 is Sun, or use names)
   ...
   # run five minutes after midnight, every day
   5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
   ...

Kullanılabilen (man sayfasında belgelenen) özel "takma adlara", özellikle de saat ve tarih alternatifi olmayan "@reboot" a dikkat etmek iyidir.

   # Run once after reboot.
   @reboot         /usr/local/sbin/run_only_once_after_reboot.sh

Bu hileyi cron işinizi dakikada birkaç kez çalıştırmak için de kullanabilirsiniz.

   # Run every minute at 0, 20, and 40 second intervals
   * * * * *       sleep 00; /usr/local/sbin/run_3times_per_minute.sh
   * * * * *       sleep 20; /usr/local/sbin/run_3times_per_minute.sh
   * * * * *       sleep 40; /usr/local/sbin/run_3times_per_minute.sh

Bir cron işi eklemek için üç şeyden birini yapabilirsiniz:

  1. kullanıcının crontab'ına yukarıda gösterildiği gibi bir komut ekleyin (ve crontab, bölüm 5, kılavuz sayfasından).

    • bir kullanıcının crontab'ını root olarak düzenleyin crontab -e -u <username>
    • veya mevcut kullanıcının crontab'ını crontab -e
    • Düzenleyiciyi EDITORortam değişkeni ile ayarlayabilirsiniz
      • env EDITOR=nano crontab -e -u <username>
      • veya tüm kabuk oturumunuz için EDITOR değerini ayarlayın
        1. export EDITOR=vim
        2. crontab -e
    • Komut dosyalarını şununla çalıştırılabilir yap: chmod a+x <file>


  1. bir cron işi olarak bir komut dosyası / program oluşturun ve bunu sistemin anacron /etc/cron.*lydizinlerine ekleyin

    • anacron /etc/cron.*ly dizinleri:
      • /etc/cron.daily
      • /etc/cron.hourly
      • /etc/cron.monthly
      • /etc/cron.weekly
    • de olduğu gibi:
      • /etc/cron.daily/script_runs_daily.sh
      • chmod a+x /etc/cron.daily/script_runs_daily.sh - çalıştırılabilir yap
    • Ayrıca bkz. Anacron man sayfası: man anacron
    • Komut dosyalarını şununla çalıştırılabilir yap: chmod a+x <file>
    • Bu cron. * Ly betiği ne zaman çalışır?
      • RHEL / CentOS 5.x için, belirli bir zamanda çalışmak /etc/crontabveya /etc/anacrontabçalışmak üzere yapılandırılırlar
      • RHEL / CentOS 6.x + ve Fedora 17+ Linux sistemleri bunu sadece içinde tanımlar /etc/anacrontabve cron.hourly/etc/cron.d/0hourly


  1. Veya, Bir kişi sistem crontables oluşturabilir /etc/cron.d.

    • Daha önce açıklanan crontab sözdizimi (ayrıca bir kullanıcının her işi şu şekilde yürütmesini sağlar) bir dosyaya konur ve dosya /etc/cron.d dizinine bırakılır.
    • Bunların sistem ambalajında ​​(örn. RPM paketleri) yönetilmesi kolaydır, bu nedenle genellikle uygulamaya özel olabilir.
    • Sözdizimi farkı, kullanıcının cron işi için saat / tarih alanlarından sonra ve komutun yürütülmesinden önce belirtilmesi gerektiğidir.
    • Eklemek için eklenen dosyaların /etc/cron.dyürütülebilir olması gerekmez.
    • İşte kullanıcı olarak yürütülür örnek iştir someuserve kullanımı /bin/bashkabuk zorlanır olarak.


   File: /etc/cron.d/myapp-cron
   # use /bin/bash to run commands, no matter what /etc/passwd says
   SHELL=/bin/bash
   # Execute a nightly (11:00pm) cron job to scrub application records
   00 23 * * * someuser /opt/myapp/bin/scrubrecords.php

5

Bazen rvm ile crontab kullanarak PATH ve GEM_PATH belirtmeniz gerekir.

Bunun gibi:

# top of crontab file
PATH=/home/user_name/.rvm/gems/ruby-2.2.0/bin:/home/user_name/.rvm/gems/ruby-2.2.0@global/bin:/home/user_name/.rvm/rubies/ruby-2.2.$
GEM_PATH=/home/user_name/.rvm/gems/ruby-2.2.0:/home/user_name/.rvm/gems/ruby-2.2.0@global

# jobs
00 00 * * * ruby path/to/your/script.rb
00 */4 * * * ruby path/to/your/script2.rb
00 8,12,22 * * * ruby path/to/your/script3.rb

4

Bir cron işi kurmak için hızlı rehber

Yeni bir metin dosyası oluşturun, örnek: mycronjobs.txt

Her günlük iş için (00:00, 03:45), program satırlarını mycronjobs.txt dosyasına kaydedin

00 00 * * * ruby path/to/your/script.rb
45 03 * * * path/to/your/script2.sh

İşleri cron'a gönderin (bunu her çalıştırdığınızda, cron depolananları siler ve mycronjobs.txt dosyasındaki yeni bilgilerle güncellenir )

crontab mycronjobs.txt

Ekstra Faydalı Bilgiler

Mevcut cron işlerini görün

crontab -l

Tüm cron işlerini kaldır

crontab -r

Crontab sözdiziminiz 03:45 için yanlış. Crontab alanları Dakika sonra Saat, yani "45 03" şeklindedir - yazınızda bunu geriye alırsınız.
Russell E Glaue

1

Kabuk betiğini cron işi kullanarak veya bir kabuk betiği yazarak iki şekilde yürütebilirsiniz

Komut dosyası adınızın "yourscript.sh" olduğunu varsayalım.

Önce komut dosyasının kullanıcı iznini kontrol edin. komut dosyasının kullanıcı iznini kontrol etmek için aşağıdaki komutu kullanın

ll script.sh

Komut dosyası kökteyse aşağıdaki komutu kullanın

sudo crontab -e

İkincisi, komut dosyası "ubuntu" kullanıcısını tutarsa ​​aşağıdaki komutu kullanın

crontab -e

Aşağıdaki satırı crontab'ınıza ekleyin: -

55 23 * * * /yol/to/yourscript.sh

Bunu yapmanın bir başka yolu bir senaryo yazmak ve kağıtta çalıştırmaktır

Her gün 23:55 saatinde çalışacak olan komut dosyası adınızı (örn: - youscript.sh) girmeniz gereken komut dosyası

#!/bin/bash while true do /home/modassir/yourscript.sh sleep 1d done

bir dosyaya kaydedin ("every-day.sh" adını verelim)

uyku 1d - bir gün beklediği anlamına gelir ve daha sonra tekrar çalışır.

Şimdi script'inize aşağıdaki komutu verin: aşağıdaki komutu kullanın: -

chmod + x every-day.sh

şimdi, bu kabuk betiğini "nohup" kullanarak arka planda çalıştırın. Bu, oturumunuzdan çıktıktan sonra bile komut dosyasını yürütmeye devam edecektir.

komut dosyasını yürütmek için aşağıdaki komutu kullanın.

nohup ./every-day.sh &

Not: - "yourscript.sh" dosyasını her gün 23: 55'te çalıştırmak için, tam olarak 23: 55'te "every-day.sh" komut dosyasını yürütmeniz gerekir.


0

Bu cümleyi bir crontab dosyasına yerleştirin: 0 0 * * * / usr / local / bin / python /opt/ByAccount.py> /var/log/cron.log 2> & 1

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.