Belirli bir cronu (saat başı, günlük, haftalık} komut dosyası) sağlam şekilde devre dışı bırakma


25

Uyguladığım çeşitli sistemlerde, yaygın olarak kullanılan /etc/cron.{hourly,daily,weekly}düzende çalıştırılan cron komut dosyaları var . Bilmek istediğim, herhangi bir ortak 'bu betiği devre dışı bırak' işlevi olup olmadığıdır.

Açıkçası, belirli bir dizinden bir şeyi silmek, onu etkisiz hale getirir, ancak daha kalıcı bir çözüm arıyorum. Silme /etc/cron.daily/slocate, updatedbev makinemdeki gece devre dışı bırakmak için çalışacaktır (hiç kullanmadığım yerde slocate), ancak bir dahaki sefere paketi yükselttiğimde, yeniden görüneceğinden eminim.

En çok ilgilendiğim iki dağıtım Gentoo ve OpenSUSE'dir, ancak yaygın olarak uygulanan bir mekanizma olduğunu umuyorum. Her iki dağıtımda da vixie-cron kullandım (önemli olduğundan emin değilim).

Yanıtlar:


45

Sen gerekir chmod -x scriptnamebir senaryo devre dışı bırakmak ama yerinde dosyayı bırakın.


5
Bu, paket yönetim sistemi tarafından geri alınabilir veya olmayabilir. Bundan chattr +i scriptnamesonra yaparak bunu daha sağlam hale getirebilirsin chmod.
mc0e

değişmez dosyaları hakkında öğrettiğin için @ mc0e teşekkürler, ama birisi bir zamanlar söylediği gibi , onlar korkutucu . Yaptıklarımı unutursam, çok sinir bozucu bir soruna yol açabilir.
Jonathan Y.

2
@JonathanY .: Bu ne lsattriçindir - korkutucuyu kaldırmak için (bir dosyanın niteliklerini listeler).
sonraki duyuruya kadar duraklatıldı.

1
DW elbette, ama bir şey anlaşılmaz şekilde yanlış gittiğinde dosya özniteliklerine bakmayı bilmek (tıpkı bağladığım konudaki gibi) buradaki gerçek vuruştur.
Jonathan Y.,

@JonathanY. Yani şimdi biliyorsun. :-) Her halükarda, bence bu bağlantılı konudaki 'korkutucu' bit,
chattr'in

9

run-parts, adlarında nokta olan işleri yürütmez;

mv /etc/cron.d/job /etc/cron.d/job.disabled

hile yapacak.


1
Maalesef, programı yükseltirken de aynı problemi yaşayacak - cron işinin var olup olmadığını kontrol edecek ve orjinal ismiyle var olmadığından, yeniden oluşturulacak.
Jenny D,

2
Programı yükseltirken geri dönmek, kullanılan paket aracının yan etkisidir, basit yöntemlerle düzeltilemez ve Cron'un hatası değildir. Bazı paket sistemleri önceki dosyaları izler ve silerler, diğerleri yeni ve eski olanları dağıtır ve incelemede değişiklik olup olmadığını sorar. Ne olursa olsun, istenmeyen davranışlar üreten güncellemeler, bu noktada unix sistemleri yönetiminin sinir bozucu, ancak rutin bir parçası olmalıdır. Her bir ortamdaki etkileriyle ilgili tüm değişiklikleri düzenli olarak gözden geçirmek için çok hızlı hareket eden çok fazla paket var.
Peelman

Debian'da, bir dosya yönlendirme fikri vardır - yani dosyayı paket yöneticisi tarafından yönetilirken etkin bir şekilde yeniden adlandırabilirsiniz. Gentoo ve / veya SUSE’de de benzer bir mekanizma var?
Bas

9

Genellikle cron.daily, /etc/crontabörneğin

run-parts --report /etc/cron.daily

man run-parts size seçenekler sunar.

run-parts --test /etc/cron.daily hangi işlerin çalıştırılmadan yürütüldüğünü gösterir.

'Devre dışı' alt dizini oluşturmayı ve işimi oraya taşımayı tercih ederim

Herhangi bir durumda, bir paketi güncellerseniz işin tekrar yapılması veya 'x' bitlerinin kaldırılması muhtemeldir.


1

Hiç kullanmazsanız slocate paketini kaldırabilirsiniz.


Bu sadece bir örnek, ama yine de iyi bir tavsiye, teşekkürler. (Bir şeylerin
değişkenliğe

Slocate'i çıkarın ve yerine mlocate'i kurun. Çok daha iyi.
mc0e

1

Eğer cfengine kullanıyorsanız ( https://cfengine.com/ ) bunu devre dışı bırakarak yapabilirsiniz. Sadece bir grup ana bilgisayar için bir söz dosyası yazmanız yeterlidir ve bir sonraki cfagent işleminde kendisini uygular. Bunu kukla ya da şefle ya da her neyse yapmak oldukça basit olmalı.


İlginç. Yapılandırma yönetimi araçlarına sadece çok teğetsel olarak rastladım. Genel bir "Keyfi Unix benzeri bir sistemim var" çözümü arıyordum.
benizi

1

/Etc/cron.daily ve diğ. ark. komut dosyaları, çalışma parçaları adlı bir komut dosyası tarafından çalıştırılır. Bu senaryo değişiyor. Örneğin, yukarıda belirtilen --test anahtarı şu anda kullandığım makinede değil.

Run-parçaları bir bash betiğidir. Dizindeki tüm scriptleri çalıştırmak için argüman olarak verilen genel olarak faydalı bir araçtır. Genellikle / usr / bin / run-parts konumunda bulunur.

Neyin çalıştırılacağına karar vermek için bir mantık karmaşasına sahiptir. Bu kod, sorunuzun cevabını tutar ancak aynı zamanda değişkenlik gösterir. Bu yüzden güvenli olması için kodu okumanız gerekiyor.

Baktığım sürümde, <foo> dizini üzerinde çalışırken <foo> /jobs.deny dosyasını kontrol eden bir mantık var. Eğer varsa, o dosyada belirtilen herhangi bir betiği tek bir satırda çalıştırmayı reddeder. Bu işleve sahip olduğunuzu varsayarsak harikadır, çünkü yükleyen paket yüklendiğinde veya yükseltildiğinde çalışmaya devam eder.


0

RHEL ve türevleri ( crontabspaket sağlayan ) ile ilgileniyorsanız , ismini jobs.denydosyaya koyarak bir işi açıkça devre dışı bırakabilirsiniz .

Gönderen crontabs / run-parçaları kılavuz sayfasında :

Dosyaların çalıştırılmasına, diğer izin verme / reddetme yapılandırma dosyaları ile benzer şekilde çalışan, jobs.allow veya jobs.den dosyalarının oluşturulmasıyla izin verilebilir veya reddedilebilir. Dosya belirtilen dizinde oluşturulmalıdır.

Örnek /etc/cron.daily/jobs.deny, bu betiğin yürütülmesini yasaklayan örneğin 0logwatch içerebilir.


-1

Kullanıcı crontab'larını da istemiyorsanız, servis listenizdeki crond'u devre dışı bırakmanız yeterlidir.

Debian'da ve Debian'a dayanan sürümlerde bu sadece bağlantıyı uygun /etc/rcX.d'den (runlevel X için) kaldırma meselesidir.

SUSE veya Gentoo'daki servisleri nasıl idare ettiğinizi bilmiyorum.


4
Bu sadece kötü bir fikir. Cronu tamamen devre dışı bırakmak logrotate, updatedb, muhtemelen gözetimsiz yükseltme ve standart yedeklemeler gibi faydalı bakım görevlerini devre dışı bırakacaktır.
Tobu,

Updatedb tam olarak devre dışı bırakmaya çalışıyorum (db slocate için günceller) Bununla birlikte, evet, genel olarak kötü tavsiye.
benizi

Ay pardon. Sorunuzu yanlış anladım ve tek bir belirli olanı değil, TÜM sisteme özgü cronjobs'u devre dışı bırakmak istediğinizi düşündüm.
jishi
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.