2012-12-23 15 views
10

Bash/Shell kullanarak Crontab görevlerini etkinleştirmenin ve devre dışı bırakmanın bir yolu var mı?Bash/Shell ile Crontab içindeki görevleri etkinleştirme/devre dışı bırakma

Kullanıcı, Sunucu 1'i başlattığında, Sunucu 1 Crontab satırını vb. Etkinleştirir. Kullanıcı, Sunucu 1'i durdurduğunda, Sunucu 1 Crontab hattı devre dışı bırakılır (#). Bu mümkün mü ve nasıl? peşin

Teşekkür

*/1 * * * * Server 1 check 
*/1 * * * * Server 2 check 
*/1 * * * * Server 3 check 
+0

Tüm komut dosyalarınız tarafından kullanılmak üzere bir sentinel dizini kullanabilir ve her komut dosyasında bekledikleri iletinin burada olup olmadığını kontrol edebilirsiniz - eğer değilse, yürütmeyi iptal edebilirsiniz – fge

cevap

14
SERVERNUM=$1 

etkinleştirmek için:

crontab -l | sed "/^#.*Server $SERVERNUM check/s/^#//" | crontab - 

devre dışı bırakmak için:

crontab -l | sed "/^[^#].*Server $SERVERNUM check/s/^/#/" | crontab - 

Transkript:

[email protected]$ crontab -l 
*/1 * * * * Server 1 check 
*/1 * * * * Server 2 check 
*/1 * * * * Server 3 check 
[email protected]$ crontab -l | sed '/^[^#].*Server 1 check/s/^/#/' | crontab - 
[email protected]$ crontab -l 
#*/1 * * * * Server 1 check 
*/1 * * * * Server 2 check 
*/1 * * * * Server 3 check 
[email protected]$ crontab -l | sed '/^#.*Server 1 check/s/^#//' | crontab - 
[email protected]$ crontab -l 
*/1 * * * * Server 1 check 
*/1 * * * * Server 2 check 
*/1 * * * * Server 3 check 
+0

# içinde bir ekleme/çıkarma görünmüyor crontab. On = */1 * * * * Sunucu 1 kontrol edin Kapalı = # */1 * * * * Sunucu 1 kontrol edin – user1621988

+0

Sadece sistemimde denedim ve çalıştı. – Barmar

+0

Wonderfull, bu çalışma, karşılaştığım tek sorun Bash'de Sunucu sayısını dinamik hale getirmektir, bununla ilgili problem şu ki, bu #. * Sunucu $ 1 çek/çalışmıyor, "$ 1". Peki, $ 1 değişkenini Numbers'a nasıl geçirebilirim? – user1621988

2

Her sunucu için bir cron işini /etc/cron.d'a eklemenizi öneririm. Ardından, cron komutu çalıştırılacaksa, cron betiğinin bazı işaretleyici dosyalarını taramasını sağlayın.

+0

Diğer bir ortak düzenleme, '/ path/to/servers' dizinine sahip olmak ve daha sonra' run-parts/path/to/servers' ile yalnızca bir cron işi olmaktır. Ardından sunucuyu yeniden adlandırmak veya sunucusunu 'server' dizininde kaldırmak için bir sunucu anount'unu devre dışı bırakmak. ('run-parts', Debian'a özgüdür, ancak platformunuz eksikse, kendi yuvarlanmanız zor değildir.) – tripleee

0

Bu bir varyant, her gece kendini yükleyen bir cronjob kullanıyorum. Sadece bir dosyayı düzenlerim ve her akşam saat 10'da yeniden yüklenir. Yeniden yüklemenin daha sık gerçekleşmesini sağlayabilirsiniz. Her düğüm için bir dosya dizini tutuyorum. Hile, hiç kimsenin yeniden yükleme hattını yorumlamadığından emin olun.

0 22 * * * crontab /home/ME/cron_files/NODE 
0

hızlı ve kirli düzeltme olarak, etkinleştirmek veya uygun cron script yürütmek izni devre dışı bırakabilir.

E.g. otomatik (G/Ç alıcı olabilir) veritabanını güncelleyerek gelen bulmak önlemek isterseniz:

cd /etc/cron.daily 

sudo chmod a-x locate 

Bu cron çerçevesi karşı olabilir, ama çabuk uygulanır ve acil ihtiyaçları durumunda çalışır.