Cài đặt crontab bằng bash script


11

Tôi đã tạo một tập lệnh để cài đặt hai tập lệnh vào 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

Kịch bản chạy và thêm hai dòng vào crontab. Nhưng nếu tôi chạy lại đoạn script, nó sẽ thêm các dòng đó một lần nữa, do đó tôi sẽ có bốn dòng nói cùng một thứ. Tôi muốn tập lệnh cài đặt chạy sao cho các dòng được chèn vào crontab không lặp lại. Làm thế nào tôi có thể làm điều đó


Tôi không hiểu mục tiêu của bạn là gì? Tại sao bạn viết kịch bản ở vị trí đầu tiên?, vui lòng chỉnh sửa và thêm thông tin trong bài viết gốc của bạn. tks
X Tian

Câu trả lời:


18

Tôi sẽ khuyên bạn nên sử dụng /etc/cron.dhơn crontab.

Bạn có thể đặt các tệp trong /etc/cron.dđó hoạt động như các mục crontab. Mặc dù định dạng hơi khác nhau.

Ví dụ
/etc/cron.d/pcap:

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

Sự khác biệt trong định dạng là thêm người dùng để chạy công việc như sau khi đặc tả thời gian.

Bây giờ bạn có thể chỉ cần kiểm tra xem tập tin có tồn tại không và nếu bạn ghi đè lên nó, nó không thành vấn đề.

 

Lưu ý rằng có thể cron daemon của bạn có thể không có /etc/cron.d. Tôi không biết cron daemon nào có nó, nhưng vixie cron là daemon cron tiêu chuẩn trên linux, và nó có.


3

Thay vào đó, bạn có thể khai báo một hàm:

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

và gọi nó bằng cách nói:

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

Điều này sẽ chỉ nối dòng nếu không tồn tại trong tệp.


bạn có thể vui lòng cho biết grep -Fq "$ 1" không?
Jishnu U Nair

Và tập lệnh đưa ra lỗi grep: tệp đầu vào `mycron 'cũng là đầu ra
Jishnu U Nair

@JishnuUNair -Fsẽ grepdiễn giải mô hình dưới dạng chuỗi cố định.
devnull

@JishnuUNair Bạn có chắc chắn rằng bạn đã sao chép chính xác văn bản trên không?
devnull

vâng, tôi đã sao chép nó một cách chính xác.
Jishnu U Nair

1

từ bash tôi sử dụng

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

Đồng thời sử dụng tập lệnh này để thêm các mục cron trên các máy chủ từ xa

    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

Bạn có thể viết một tập lệnh và thêm nó vào crontab để ngăn chặn nó:

####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
Điều này không trả lời câu hỏi. Ngoài ra, kill -9chỉ nên được thực hiện như là phương sách cuối cùng - unix.stackexchange.com/questions/8916/iêu
Graeme
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.