Встановлення 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.dбільше crontab.

Ви можете розміщувати файли, в /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

Різниця у форматі - додавання користувача до виконання завдання як після специфікації часу.

Тепер ви можете просто перевірити, чи існує файл, і якщо ви його перезаписали, це не має значення.

 

Зверніть увагу, що можливо, у вашого демона кронів може не бути /etc/cron.d. Я не знаю, у яких демонів cron це є, але vixie cron є стандартним демоном cron для linux, і це так.


3

Ви можете замість цього оголосити функцію:

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

і викликати це, кажучи:

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

Це додає рядок, лише якщо у файлі його немає.


Ви можете, будь ласка, сказати, що робить греп -Fq "$ 1"?
Jishnu U Nair

І сценарій дає помилку grep: вхідний файл `mycron 'також вихід
Jishnu U Nair

@JishnuUNair -Fзробить grepінтерпретацію шаблону як фіксовану рядок.
devnull

@JishnuUNair Ви впевнені, що правильно скопіювали вищезазначений текст?
devnull

так, я правильно його скопіював.
Jishnu U Nair

1

з bash я використовую

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

Також використовуйте цей скрипт для додавання записів хронів на віддалені сервери

    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/…
Graeme
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.