Bash betiği kullanarak crontab yükleme


11

Crontab'a iki komut dosyası yüklemek için bir komut dosyası oluşturdum.

#!/bin/bash

 sudo crontab -l > mycron
 #echo new cron into cron file

 echo "*/05 * * * * bash /mnt/md0/capture/delete_old_pcap.sh" >> mycron #schedule the delete script
 echo "*/12 * * * * bash  /mnt/md0/capture/merge_pcap.sh" >> mycron     #schedule the merge script

#install new cron file
 crontab mycron
rm mycron

Komut dosyası çalışır ve iki satırı crontab'a ekler. Ama senaryoyu tekrar çalıştırırsam, bu satırları tekrar ekler, böylece aynı şeyleri söyleyen dört satırım olacak. Yükleme betiği, crontab'a eklenen satırların tekrarlanmayacağı şekilde çalıştırılmasını istiyorum. Bunu nasıl yapabilirim


Amacın ne olduğunu anlamıyorum? ilk etapta senaryo bunu yaptın neden? lütfen düzenlemek ve orijinal sonrası eklenti bilgi. tks
X Tian

Yanıtlar:


19

/etc/cron.dÜzerinden kullanmanızı tavsiye ederim crontab.

/etc/cron.dCrontab girişleri gibi davranan dosyaları yerleştirebilirsiniz . Biçim biraz farklı olsa da.

Örneğin
/etc/cron.d/pcap:

*/05 * * * * root bash /mnt/md0/capture/delete_old_pcap.sh
*/12 * * * * root bash  /mnt/md0/capture/merge_pcap.sh

Biçimdeki fark, kullanıcıyı zaman belirtiminden sonra olduğu gibi işi çalıştırmak için eklemektir.

Şimdi dosyanın var olup olmadığını kontrol edebilirsiniz ve üzerine yazarsanız önemli değil.

 

Cron artalan programınızda olmayabilir /etc/cron.d. Hangi cron cinlerinin ona sahip olduğunu bilmiyorum, ama vixie cron linux'daki standart cron cini.


3

Bunun yerine bir işlev bildirebilirsiniz:

add() {
  grep -Fq "$1" mycron || echo "$1" >> mycron
}

ve şunu söyleyerek çağırınız:

add "*/05 * * * * bash /mnt/md0/capture/delete_old_pcap.sh"

Bu, satırı yalnızca dosyada yoksa ekler.


grep -Fq "$ 1" 'in ne yaptığını söyleyebilir misiniz?
Jishnu U Nair

Ve komut dosyası grep hatası veriyor: `` mycron '' girdi dosyası da çıktı
Jishnu U Nair

@JishnuUNair -Fyapacak grepsabit dize olarak desen yorumlamak.
devnull

@JishnuUNair Yukarıdaki metni doğru kopyaladığınızdan emin misiniz?
devnull

evet, doğru kopyaladım.
Jishnu U Nair

1

bash kullanıyorum

    crontab -l | { cat; echo "*/10 * * * * /script/script.sh > /dev/null 2>&1"; } | crontab -

Bu komut dosyasını, uzak sunucularda cron girdileri eklemek için de kullanın

    cronok="##";
    cronok+=`ssh $host 'crontab -l'`;
    pattern="reboot.sh"

    if [[ "$cronok" == *${pattern}* ]]; then
         echo "found cron  at [$host]"
      else
        echo "Cron at [$host] not found adding now"
       `ssh $host 'crontab -l | { cat; echo "*/10 * * * * /root/reboot.sh > /dev/null 2>&1"; } | crontab -'`
       echo "finished cron"
    fi

0

Bir komut dosyası yazıp durdurmak için crontab'a ekleyebilirsiniz:

####You should calculate tiem you want kill your script.
#######code of calculating........
pid=`ps ax |egrep myscript |awk {'print $1'}`
kill -9 $pid
#OR
kill $pid

3
Bu soruya cevap vermiyor. Ayrıca, kill -9sadece son çare olarak yapılmalıdır - unix.stackexchange.com/questions/8916/…
Graeme
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.