Menginstal crontab menggunakan skrip bash


11

Saya telah membuat skrip untuk menginstal dua skrip ke crontab.

#!/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

Script berjalan, dan tambahkan dua baris ke crontab. Tetapi jika saya menjalankan skrip lagi, itu menambahkan baris itu lagi, jadi saya akan memiliki empat baris mengatakan hal yang sama. Saya ingin skrip instal dijalankan sehingga garis yang dimasukkan ke crontab tidak diulang. Bagaimana saya bisa melakukan itu


Saya tidak mengerti apa tujuan Anda? mengapa Anda skrip itu di tempat pertama ?, harap edit dan tambahkan info di posting asli Anda. tks
X Tian

Jawaban:


18

Saya akan merekomendasikan penggunaan /etc/cron.dlebih crontab.

Anda dapat menempatkan file /etc/cron.dyang berperilaku seperti entri crontab. Padahal formatnya sedikit berbeda.

Sebagai contoh
/etc/cron.d/pcap:

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

Perbedaan dalam format adalah menambahkan pengguna untuk menjalankan pekerjaan sesuai spesifikasi waktu.

Sekarang Anda cukup memeriksa apakah file itu ada, dan jika Anda menimpanya, itu tidak masalah.

 

Perhatikan bahwa mungkin saja daemon cron Anda mungkin tidak memilikinya /etc/cron.d. Saya tidak tahu daemon cron mana yang memilikinya, tetapi vixie cron adalah daemon cron standar di linux, dan memang demikian.


3

Anda bisa mendeklarasikan fungsi:

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

dan memohonnya dengan mengatakan:

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

Ini akan menambahkan baris hanya jika tidak ada dalam file.


dapatkah Anda memberi tahu apa yang dilakukan grep -Fq "$ 1"?
Jishnu U Nair

Dan skripnya memberikan kesalahan grep: file input `mycron 'juga merupakan output
Jishnu U Nair

@ JishnuUNair -Fakan membuat grepinterpretasikan polanya sebagai string tetap.
devnull

@ JishnuUNair Apakah Anda yakin telah menyalin teks di atas dengan benar?
devnull

ya, saya sudah menyalinnya dengan benar.
Jishnu U Nair

1

dari bash saya gunakan

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

Juga gunakan skrip ini untuk menambahkan entri cron di server jauh

    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

Anda dapat menulis skrip dan menambahkannya ke crontab untuk menghentikannya:

####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
Ini tidak menjawab pertanyaan. Selain itu, kill -9hanya boleh dilakukan sebagai upaya terakhir - unix.stackexchange.com/questions/8916/…
Graeme
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.