การติดตั้ง crontab โดยใช้ bash script


11

ฉันได้สร้างสคริปต์เพื่อติดตั้งสองสคริปต์ไปยัง 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

สคริปต์รันและเพิ่มสองบรรทัดไปยัง crontab แต่ถ้าฉันรันสคริปต์อีกครั้งมันจะเพิ่มบรรทัดเหล่านั้นอีกครั้งดังนั้นฉันจะมีสี่บรรทัดที่พูดสิ่งเดียวกัน ฉันต้องการให้สคริปต์การติดตั้งทำงานเช่นนั้นบรรทัดที่แทรกไปยัง crontab จะไม่ทำซ้ำ ฉันจะทำสิ่งนั้นได้อย่างไร


ฉันไม่เข้าใจว่าเป้าหมายของคุณคืออะไร? ทำไมคุณถึงเขียนสคริปต์ในตอนแรกโปรดแก้ไขและเพิ่มข้อมูลในโพสต์ต้นฉบับของคุณ tks
X Tian

คำตอบ:


19

ฉันจะแนะนำให้ใช้มากกว่า/etc/cron.dcrontab

คุณสามารถวางไฟล์/etc/cron.dที่ทำตัวเหมือนรายการ crontab แม้ว่ารูปแบบจะแตกต่างกันเล็กน้อย

ตัวอย่างเช่น
/etc/cron.d/pcap:

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

ความแตกต่างในรูปแบบคือการเพิ่มผู้ใช้เพื่อเรียกใช้งานหลังจากกำหนดเวลา

ตอนนี้คุณสามารถตรวจสอบได้ว่ามีไฟล์อยู่หรือไม่และถ้าคุณเขียนทับไฟล์มันก็ไม่สำคัญ

 

โปรดทราบว่ามันเป็นไปได้ภูต cron /etc/cron.dของคุณอาจไม่ได้ ฉันไม่ทราบว่า cron daemons มีมัน แต่ vixie cron เป็น cron daemon มาตรฐานบน linux และมันทำ


3

คุณสามารถประกาศฟังก์ชันแทน:

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

และเรียกมันโดยพูดว่า:

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

สิ่งนี้จะต่อท้ายบรรทัดเฉพาะในกรณีที่ไม่มีอยู่ในไฟล์


คุณช่วยบอกได้ไหมว่า grep -Fq "$ 1" ทำอะไรได้บ้าง?
Jishnu U Nair

และสคริปต์ให้ grep ข้อผิดพลาด: ไฟล์อินพุต `mycron 'เป็นเอาต์พุตเช่นกัน
Jishnu U Nair

@JishnuUNair -Fจะgrepตีความรูปแบบเป็นสตริงคงที่
devnull

@JishnuUNair คุณแน่ใจหรือว่าคุณคัดลอกข้อความด้านบนถูกต้องหรือไม่
devnull

ใช่ฉันคัดลอกถูกต้องแล้ว
Jishnu U Nair

1

จากทุบตีฉันใช้

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

ใช้สคริปต์นี้เพื่อเพิ่มรายการ cron บนเซิร์ฟเวอร์ระยะไกล

    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

คุณสามารถเขียนสคริปต์และเพิ่มลงใน crontab เพื่อหยุด:

####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
สิ่งนี้ไม่ตอบคำถาม นอกจากนี้kill -9ควรทำเป็นทางเลือกสุดท้าย - unix.stackexchange.com/questions/8916/…
แกรม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.