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 bitti1.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.weekly2) 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ı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.monthlySistemin 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örevi2.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 2018Daha 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.
/ 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 > 14.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.shZamanlanmış görevleri, kullanıcıları değiştirmeden doğrudan görüntüleyin
# crontab -u linzhongniao -l * * * * * / bin / sh tar.shCrond 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ökGü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
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 dosyaGü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 tmpwatch6.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.log6.4 Bazı görevlerin yerine getirilmesinden kaynaklanan sorunlara dikkat edin
* / 1 * * * * echo "==" > > /tmp/oldboy.log > / dev / null 2 > 1Bu, ö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.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 ./scripts7.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.
İ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