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

Jishnu U Nair
sumber
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
askubuntu.com/questions/58575/add-lines-to-cron-from-script
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

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.

Patrick
sumber
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.

devnull
sumber
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
Markus07
sumber
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
Teluk Persia
sumber
3
Ini tidak menjawab pertanyaan. Selain itu, kill -9hanya boleh dilakukan sebagai upaya terakhir - unix.stackexchange.com/questions/8916/…
Graeme