linux zamanlama görevi

1. Zamanlanmış görevlere giriş

1.1 crond nedir

Crond, Linux sistemindeki komutları veya belirli programları periyodik olarak yürütmek için kullanılan bir hizmet veya yazılımdır.

Özel gereksinimler: (ikinci seviye) crond hizmeti ele alınamaz.Genel çalışmada, komut dosyaları arka plan yordamları tarafından yazılır ve çalıştırılır.

# kedi while1.sh #! / bin / sh doğru iken yapmak çalışma süresi uyku 2 bitti

1.2 Linux sistemi crond'sinin zamanlama görevi

(1) Sistem günlüklerini sorgulama, sistem verilerini yedekleme, sistem önbelleklerini temizleme vb. Gibi Linux sisteminin kendisi tarafından düzenli olarak gerçekleştirilen görev işlemleri. Bu görevler bizim insan müdahalesini gerektirmez. Örneğin:

# ls -l / var / log / messages * -rw -------. 1 kök kök 2067762 Ağustos 17:43 / var / log / messages -rw -------. 1 kök kök 4483078 Temmuz 08:54 / var / log / messages-20180708 -rw -------. 1 kök kök 74256016 Temmuz 04:05 / var / log / messages-20180716 -rw -------. 1 kök kök 129343322 Temmuz 15:15 / var / log / messages-20180722 -rw -------. 1 kök kök 62219330 Temmuz 20:14 / var / log / messages-20180730 # ll / etc / | grep cron -rw -------. 1 kök root54124 Ağu 2016 anacrontab drwxr-xr-x. 2 kök kök 4096 Tem 1614:19 cron.d drwxr-xr-x. 2 kök kök 4096 Tem 1614:18 cron.daily -rw -------. 1 kök kök 0 Ağu 242016 cron.deny drwxr-xr-x. 2 kök kök 4096 Tem 1614:19 cron.hourly drwxr-xr-x. 2 kök kök 409614 Haziran 05:01 cron.monthly -rw-r - r--. 1 kök root45727 Eylül 2011 crontab drwxr-xr-x. 2 kök kök 409627 Eylül 2011 cron.weekly

2) Kullanıcılar tarafından gerçekleştirilen görev işlemleri: Bir kullanıcı veya sistem yöneticisi tarafından düzenli olarak gerçekleştirilen görevler, örneğin İnternet üzerindeki bir zaman sunucusuyla her 5 dakikada bir senkronizasyon ve her gece saat 0: 00'da site verilerini ve veritabanı verilerini yedekleme gibi. Her kullanıcı tarafından belirlenir.

Kullanıcı tarafından gerçekleştirilen görev, işletme ve bakım yöneticisi tarafından gerçekleştirilen görevdir, bu nedenle kullanıcı tarafından gerçekleştirilen görev odak noktamızdır.

1.3 Linux sistemi altında zamanlama görev yazılımı türleri

Linux sistemi altında birçok zamanlama görevi vardır, örneğin: at, crontab, anacron

at: Yalnızca bir kez yürütülen görev komutlarını zamanlamak için uygundur, örneğin: bir görevin gece işlenmesi gerekir, ancak yalnızca bu günün gecesi ani bir görevdir.At komutunu yürütmek için atd hizmetini başlatmanız gerekir.

# chkconfig --list | grep atd atd 0: kapalı 1: kapalı 2: kapalı 3: kapalı 4: kapalı 5: kapalı 6: kapalı # chkconfig --list atd atd 0: kapalı 1: kapalı 2: kapalı 3: kapalı 4: kapalı 5: kapalı 6: kapalı

2. Zamanlama görevleri için talimatlar

# crontab --help crontab: geçersiz seçenek -'- ' crontab: kullanım hatası: tanınmayan seçenek kullanım: crontab dosyası crontab "== komut sözdizimi (varsayılan işlem 1003.2'de değiştirmedir) -e (kullanıcının crontab dosyasını düzenle) == Kullanıcının crontab dosyasını düzenle -l (kullanıcının crontabını listele) == kullanıcının önbilgisini listele -r (kullanıcının crontab dosyasını sil) == kullanıcının crontab dosyasını sil -i (kullanıcının crontab dosyasını silmeden önce istem) == kullanıcının crontab dosyasını silmeden önce bilgi istemi -s (selinux bağlamı)

Komut biçimi

crontab -u (belirtilen kullanıcı varsayılan olarak root'tur) -

2.1 Talimatlar

Crontab aracılığıyla, belirli sistem komutlarını veya betik betiklerini belirli bir zamanda çalıştırabiliriz. Zaman aralığının birimi dakika, saat, gün, ay, hafta ve üstünün herhangi bir kombinasyonudur (Not: Günleri ve haftaları birleştirmeyin).

2.2 Kullanıcı izinleri ve zamanlanmış görev dosyaları

2.3 Talimat seçeneği açıklama tablosu

2.4 Talimatın formatı

Kullanıcı tarafından oluşturulan crontab dosyası / var / spool / cron dizininde saklanır Örneğin, kök kullanıcının zamanlanmış görev yapılandırma dosyası / var / spool / cron / root şeklindedir.

Crontab kullanıcılarının zamanlanmış görevleri genellikle boşluklarla ayrılmış 6 bölüme ayrılmıştır. Sistemin zamanlama görevi / etc / crontab içinde 7 bölüme ayrılmıştır, ilk 5 bölüm zaman ayarı bölümü, altıncı bölüm kullanıcının crontab çalıştırdığı ve yedinci bölüm ise aşağıdaki şekilde yürütülecek komut bölümüdür.

01 * * * * root run-parts /etc/cron.hourly 024 * * * kök çalıştırma parçaları /etc/cron.daily 224 * * 0 kök çalışma bölümleri /etc/cron.weekly 424 1 * * kök çalıştırma parçaları /etc/cron.monthly

Sistemin crontab dosyası / etc / crontab şeklindedir.

# kedi / etc / crontab KABUK = / bin / bash PATH = / sbin: / bin: / usr / sbin: / usr / bin MAILTO = kök HOME = / # Ayrıntılar için bkz. Man 4 crontabs # İş tanımı örneği: # .---------------- dakika (0-59) # | .------------- saat (0-23) # | | .---------- ayın günü (1-31) # | | | .------- ay (1-12) VEYA ocak, şubat, mar, nisan ... # | | | | .---- haftanın günü (0-6) (Pazar = 0 veya 7) VEYA güneş, pazartesi, salı, çarşamba, perşembe, cuma, oturdu # | | | | | # * * * * * yürütülecek kullanıcı adı komutu Zaman paylaşımlı gün ay haftalık kullanıcı görevi

2.5 Crontab sözdizimi biçiminde zaman periyodunun anlamı

Hatırlatma: Görevi en son gerçekleştirme zamanı 23: 30'dur.

2.6 Crontab sözdizimi formatındaki özel sembollerin anlamı

2.7 Zamanlanmış görev hizmetini açın

# chkconfig --list crond crond 0: kapalı 1: kapalı 2: açık3: açık4: açık5: açık6: kapalı # /etc/init.d/crond durumu crond (pid 1837) çalışıyor ... # ps -ef | grep crond | grep -v grep kök 18371 021:58? 00: 00: 00 crond # /etc/init.d/crond yeniden başlatma Crond durduruluyor: Crond başlatılıyor:

2.8 Zamanlanmış görevleri düzenlemek için notlar

(1) Zamanlanmış görevleri düzenlemenin dakika konumu 00 formatında ifade edilmelidir.

Örneğin, 3 Haziran sabah 09: 00'da eğitime gitmek için kural şu şekildedir:

00090306 *

(2) Hafta ve gün aynı anda kullanılamaz

Hafta ve günün aynı anda kullanılmaması gerektiğini vurgulayın aksi takdirde istenilen etki elde edilemeyebilir.

Örneğin:

Her Pazar sabah 9: 30'da sınıfa gidin

3009 * * 7 veya 3009 * * 0

2.9 Sunucu saati senkronizasyonu

(1) Saati manuel olarak senkronize et

# tarih 4 Ağustos Cmt 12:08:20 CST 2018 # date -s "23:00" 4 Ağustos Cmt 23:00:00 CST 2018 # tarih 4 Ağustos Cmt 23:00:03 CST 2018 # ntpdate / usr / sbin / ntpdate # / usr / sbin / ntpdate ntp1.aliyun.com 4 Ağu 12:10:21 ntpdate: adım zaman sunucusu 52.163.118.68 uzaklığı -39052.961525 sn # tarih 4 Ağu Cmt 12:10:30 CST 2018

(2) Zamanlanmış görevlerle otomatik senkronizasyon

# crontab -l #sync sys time by linzhongniao at 2018-08-04 * / 2 * * * * / usr / sbin / ntpdate ntp1.aliyun.com > / dev / null 2 > 1 # /etc/init.d/crond yeniden başlatma Crond durduruluyor: Crond başlatılıyor: # date -s "23:00" 4 Ağustos Cmt 23:00:00 CST 2018 # tarih 4 Ağustos Cmt 23:00:06 CST 2018 # tarih 4 Ağustos Cmt 12:21:53 CST 2018

Daha az makine ile İnternetteki saat ile senkronize edilebilir.Çok sayıda sunucu varsa, dahili bir zaman senkronizasyon sunucusu ntp sunucusu oluşturabilirsiniz.

İpucu: " > / dev / null 2 > 1 ", gereksiz dosyalar nedeniyle disk inode'unun bitmesine neden olur.

3. Üretim ortamında profesyonel crontab durumu

/ Var / www / html site dizinini her akşam saat 12'de / data dizinine yedekleyin (her seferinde farklı bir yedekleme paketi oluşturmak daha iyidir)

# kedi httpd.sh #! / bin / bash cd / var / siteler / tar zcfp / data / html _ $ (tarih +% Y% m% d% H% M) .tar.gz ./html # crontab -l | kuyruk -2 #tar / var / www / html by shell scripts by linzhongniao at 2018080000 * * * / bin / bash /server/scripts/httpd.sh > / dev / null 2 > 1

4. Zamanlanmış görevler yazmak için 5 temel esas

4.1 Zamanlama görevi kurallarına gerekli notları ekleyin

Gerekli notları ekleyin Zamanlanmış görev kurallarını yazarken (tercihen İngilizce) mümkün olduğunca çok not eklemek iyi bir alışkanlıktır.

4.2 Komut dosyası görevlerini yürütmeden önce / bin / sh ekleyin

Zamanlanmış bir görevi yürütürken, bir komut dosyası çalıştırıyorsanız, lütfen komut dosyasının önüne / bin / sh komutunu eklemeyi deneyin, aksi takdirde betiğe yürütme izinleri eklemeyi unutabilir ve görevi tamamlayamayabilirsiniz.

4.3 Belirlenen kullanıcılar altında ilgili zamanlama görevlerini gerçekleştirin

Kök ayrıcalıkları gerektiren görevler, kök kullanıcıya oturum açıp ardından ayarlanabilir. Kök ayrıcalıkları gerekmiyorsa, ortak bir kullanıcıya oturum açabilirsiniz (ayrıca doğrudan crontab -u linzhongniao -e'yi root altında ayarlayabilirsiniz)

Linzhongniao kullanıcısına geç

$ whoami Linzhongniao $ crontab -l * * * * * / bin / sh tar.sh

Zamanlanmış görevleri, kullanıcıları değiştirmeden doğrudan görüntüleyin

# crontab -u linzhongniao -l * * * * * / bin / sh tar.sh

Crond kullanıcısının profiline bir göz atın

# ll / var / spool / cron / toplam 8 -rw -------. 1 kök kök 25 Ağu 414:25 linzhongniao -rw -------. 1 kök kök 2224 Ağu 2018 kök

Günlük çalışmada zamanlanmış görevleri mümkün olduğunca düzenlemek ve görüntülemek için crontab-e ve crontab-l'yi kullanın, çünkü sözdizimi hatası denetimi olacaktır.

Aynı anda 1000 sunucuya gerçek zamanlı sistem zamanı senkronizasyonu eklerseniz, bunları tek tek değiştirmek imkansızdır.Şu anda toplu dağıtım araçlarına veya toplu işlem ve bakım komut dosyalarına ihtiyacınız vardır.

4.4 Zamanlanmış görevlerin sonuna ekle > / dev / null 2 > 1

/ dev / null, bir kara delik aygıtı veya boş bir aygıt anlamına gelen özel bir aygıttır; 2 > 1, standart hata çıktısı ile standart çıktının yolunun aynı olduğu anlamına gelir. > / dev / null 2 > 1 eşittir 1 > / dev / null, 2 > / dev / null

5. Sistem zamanlama görevi yapılandırma dosyası / etc / crontab

Sistem zamanlama görevi yedi bölüme ayrılmıştır.Belirli bir sunucuda crontab -l görünümünde zamanlama görevi yoksa, bunu sistem zamanlama görevinde görüntülemek için cat'i kullanın.

# kedi / etc / crontab SHELL = / bin / bash kabuğu yorumlayıcısı PATH = / sbin: / bin: / usr / sbin: / usr / bin PATH değişkeni MAILTO = root, görevin çıktı vermesi durumunda hangi kullanıcıya gönderileceğini tanımlar; varsayılan, kök kullanıcıdır HOME = / # Ayrıntılar için bkz. Man 4 crontabs # İş tanımı örneği: # .---------------- dakika (0-59) # | .------------- saat (0-23) # | | .---------- ayın günü (1-31) # | | | .------- ay (1-12) VEYA ocak, şubat, mar, nisan ... # | | | | .---- haftanın günü (0-6) (Pazar = 0 veya 7) VEYA güneş, pazartesi, salı, çarşamba, perşembe, cuma, oturdu # | | | | | # * * * * * yürütülecek kullanıcı adı komutu Zaman paylaşımlı gün ay hafta kullanıcı komut dosyası

Çalıştırma bölümleri aracılığıyla, sistem dizindeki tüm çalıştırılabilir dosyaları düzenli olarak çalıştırabilir

Haftalık yapılandırma dosyası

# ağaç /etc/cron.weekly /etc/cron.weekly 0 dizin, 0 dosya

Güne göre yürütülen profiller

# ll /etc/cron.daily/ toplam 24 -rwx ------. 1 kök kök 180 Temmuz 102003 logrotate -rwx ------. 1 kök kök 92722 Mart 2017 makewhatis.cron -rwx ------. 1 kök kök 18926 Oca 2015 mlocate.cron -rwxr-xr-x. 1 kök kök 212619 Temmuz 2013 prelink -rwxr-xr-x. 1 kök kök 563 Kasım 232013 readahead.cron -rwxr-xr-x. 1 kök kök 433 Kasım 72015 tmpwatch

6. Üretim senaryolarında crontab zamanlama görevlerinde nasıl hata ayıklanır

6.1 Hata ayıklama görevlerinin yürütme sıklığını artırın

Hata ayıklarken, görev yürütme sıklığını daha hızlı ayarlayın. Örneğin: her dakikada bir, her 5 dakikada bir veya mevcut zamandan 5 dakika sonra veya 2 dakikada bir çalıştırın. Bunu hayal ettiğiniz gibi yapın ve herhangi bir sorun yoksa, gerekli görev yürütme süresine değiştirin.

Vurgulayın: Bazı görevlerin sık sık gerçekleştirilmesine izin verilmez, örneğin: veri tabanına düzenli olarak veri eklemek Bu tür görevler test makinesinde test edilir ve daha sonra resmi hatta sorun çıkma olasılığı daha düşüktür.

6.2 Sistem zamanı ayarlama görevini ayarlayın

Görevi gerçekleştirmek için doğru zamanı kullanın. Ayar tamamlandıktan sonra, geçerli saati değiştirebilir ve test etmek için görev yürütme zamanının ilk birkaç dakikasına değiştirebilirsiniz (veya zamanlanmış görev hizmetini yeniden başlatabilirsiniz). Örneğin: zamanlanmış görev 9: 00'da yürütülür, sistem saatini 8:55 olarak değiştirebiliriz ve sonra Doğru şekilde yürütülüp yürütülmediğini, geçerli zamanın görev süresinin yeterince ilerisinde olup olmadığını gözlemleyin ve yalnızca üretim sunucusu bunu yapmazsa test sunucusunda çalışın.

6.3 Günlük çıktısı aracılığıyla zamanlama görevlerinde hata ayıklama

Komut dosyasına günlük çıktısı ekleyin ve ardından çıktıyı belirtilen günlüğe yazın ve ardından günlük içeriğini ve sonuçlarını inceleyin. Doğru yürütülüp yürütülmediğine bakın veya komut dosyası sonucunu aşağıdaki içeriğe bir günlük dosyasına yeniden yönlendirin. Örneğin, tar zcvf komutuna -v parametresini ekleyin Çıktıyı günlüğe koyduktan sonra, komut dosyasının çalıştırılıp çalıştırılmadığını kontrol edebilirsiniz.

* / 2 * * * * / usr / sbin / ntpdate time.windows.com > > /app/ntpdate.log

6.4 Bazı görevlerin yerine getirilmesinden kaynaklanan sorunlara dikkat edin

* / 1 * * * * echo "==" > > /tmp/oldboy.log > / dev / null 2 > 1

Bu, önde bir tane daha olduğu için yürütülemeyen gizli bir görev yapılandırmasıdır. > > /tmp/oldboy.log veya kaldırın > / dev / null 2 > 1.

6.5 Ortam değişkenlerinin neden olduğu zamanlama görevi başarısızlığına dikkat edin

Bir java programında hata ayıklarken, ortam değişkenlerine dikkat edin, ortam değişkenlerinin tanımını komut dosyasına ekleyin ve tekrar dışa aktarın. Genellikle, / etc / profile genel değişkenine yerleştirilirler, ancak ortam değişkenlerinin zamanlanmış görevlerle komut dosyalarını yürütmek için yeniden yüklenmesi gerekir.

dışa aktarma PATH = "/ usr / local / sbin: / usr / local / bin: / sbin: / bin: / usr / sbin: / usr / bin: / root / bin"

6.6 Zamanlama görevi log / var / log / cron aracılığıyla zamanlama görevlerinde hata ayıklama

# tail -f / var / log / cron 5 Ağu 11:01:01 localhost run-parts (/etc/cron.hourly): 0anacron başlıyor 5 Ağu 11:01:02 localhost anacron: Anacron başladı 2018-08-055 Ağu 11:01:02 localhost run-parts (/etc/cron.hourly): 0anacron bitti 5 Ağu 11:01:02 localhost anacron: "cron.daily" işini 34 dakikada çalıştıracak. 5 Ağu 11:01:02 localhost anacron: İşler sırayla yürütülecek 5 Ağu 11:02:01 localhost CROND: (kök) CMD (/ usr / sbin / ntpdate time.windows.com > /app/ntpdate.log)

7. Üretim zamanlama görevleri için önlemler

7.1 ihracat değişken sorunu

Crontab kabuğu çalıştırdığında, yalnızca birkaç sistem ortamı değişkeni tanınabilir ve sıradan değişkenler tanınamaz. Yazılı kodda değişkenler kullanmanız gerekiyorsa, komut dosyasının normal şekilde çalışabilmesi için değişkeni yeniden bildirmek için dışa aktarmayı kullanmak en iyisidir. Örneğin, üretimde java ile ilgili hizmet görevleri ve komut dosyaları. PATH ortam değişkenini ekledikten sonra yürütme komutunun tam yolunu yazmadan da koda PATH ortam değişkenini ekleyebilirsiniz. Örneğin, aşağıdaki / bin / tar atlanabilir.

# cat /server/scripts/tar.sh #! / bin / bash dışa aktarma PATH = "/ usr / local / sbin: / usr / local / bin: / sbin: / bin: / usr / sbin: / usr / bin: / root / bin" cd / sunucu / / bin / tar zcf yedekleme _ $ (tarih +% Y% m% d% H% M) .tar.gz ./scripts

7.2 Görev yolu sorunu

Göreli yollar değil, mutlak yollar kullandığınızdan emin olun. Komut dosyasının düzenli olarak çalıştırılması önerilir.

7.3 Komut dosyası izin sorunları

Yürütmek için / bin / sh eklemek istiyorsanız, komut dosyasına yürütülebilir izinler vermek için zamanlanmış görevde / bin / sh de kullanamazsınız.

7.4 Zaman değişkeni sorunu

"%" Yüzde işareti, crontab görevinde bir satırsonu olarak kabul edilir ve "\" ile önlenmelidir. Crontab görev komutunda, "tarih +% Y% m% d% H% M" (veya tarih +% Y-% m-% d-% H:% M) varsa, "tarih + \% Y ile değiştirilmelidir \% m \% d \% H \% M ", ancak komut dosyasında yazılan"% "yüzde işaretinin kaçılmasına gerek yoktur.

7.5 Zamanlanmış görevlere notlar ekleyin

Zamanlanmış görevler yazarken, 1 Ağustos 2018 tarihinde http sunucusunda kimin 10 dakikalık senkronizasyon işlemi yaptığı gibi, kim, ne zaman, kim için ve ne yaptıkları gibi notlar eklemelisiniz.

7.6 Komutları değiştirmek için komut programları kullanın

Görevleri gerçekleştirmek için komut dosyalarını kullanmak hataları azaltabilir, verimliliği artırabilir ve standartlaştırabilir. Bu iyi bir alışkanlıktır.

7.7 cron görev betiğiyle ilgili sorunlar

Zamanlama görev komut dizisindeki program komutları için tam yolu kullanmayı deneyin.

8. Üretimi yeniden üretmek için üretim ortamında zamanlanmış görevler yer kalmadı

İnode'un doldurulduğu iş durumu

Soru: Kullanıcı parolası değiştirilirken ve kullanıcı eklenirken aşağıdaki hata oluştu, ancak disk df -h ile dolu değil, neden?

1. Parola şifresini değiştirirken bir hata rapor edildi: Kimlik doğrulama belirteci değiştirme hatası 2. Kullanıcı hatası ekle: şifre dosyasını kilitlemek için devre dışı bırakıldı

Analiz fikri: / etc / passwd ve / etc / shadow dosyalarının izinlerini sorunsuz bir şekilde kontrol edin ve ardından nedeni izlemek ve analiz etmek için strace -f passwd komutunu kullanın ve şu kilit hata mesajını görün: "Cihazda yer kalmadı". Son olarak, kök bölümün inode'unun dolu olduğunu kontrol etmek için df -hi'yi kullanın.

Çözüm:

(1 Posta hizmetini açın, posta hizmeti açıldığında posta dizini boşaltılacaktır. Dosyaları doğrudan silmeyin. Üretim ortamındaki posta hizmeti açılamaz.

(2 Zamanlanmış görevin sonuna ekle > / dev / null 2 > 1 Çıktı içeriğini boş olarak tanımlayın. Bu şekilde gereksiz dosyalar oluşturulmayacaktır.

Yeniden yazdırma adresi: https://blog.51cto.com/10642812/2280981

Blogger deniz esintisinin orijinal eserleri

315 bu yıl neyi tekrar ortaya çıkardı? Kara listedeki "karides pisliği" baharatlı şeritlerin yasadışı üretimi
önceki
"Legend of the Chief" bugün Qingming Liao Yan'ın ilk sert çıkışını yayınladı
Sonraki
Refine M5, 201.800 ve 211.800 için iki yeni model ekliyor
Supreme'in güçlü genişlemesi olan Brooklyn mağazası tamamlanmak üzere!
CCTV 315'e odaklanın: Akıllı robotlar günde 5000 taciz edici arama yapabilir!
LPL transfer dönemi başladı ve değerli WE oyuncusu ayrıldığını duyurdu! Gönderinin içeriği üzücü
MySQL optimize edilmiş açıklama
2018 Fox RS yurtdışında 1500 birimle sınırlı sınırlı sayıda piyasaya sürüldü
Vivo NEX poster pozlama: 22,5 W süper hızlı şarjlı üst
Vücudu sık sık olan bu yerli Rapçi markası, 2017 sonbahar ve kış serilerini çıkaracak!
Linux birincil işletim ve bakımı (3) -Linux kullanıcı izinleri ve yönetimi
Yeni BMW X5 "iyi bir genç adam", ancak yine de otonom sürüşü zorlamaya cesaret edemiyor
LCK transfer dönemindeki büyük oyuncular bir takım oluşturur, IG'de 30 dakika hayatta kalabilirler mi?
2018 popüler CM7 resmi olarak piyasaya sürüldü ve 16.99-22.99 milyon satış
To Top