Установка crontab с использованием скрипта bash


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

Ответы:


18

Я бы порекомендовал использовать /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

Разница в формате заключается в добавлении пользователя для запуска задания, как после указания времени.

Теперь вы можете просто проверить, существует ли файл, и если вы перезаписали его, это не имеет значения.

 

Обратите внимание, что, возможно, ваш демон cron может этого не иметь /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"

Это добавит строку, только если не существует в файле.


Подскажите, пожалуйста, что делает grep -Fq "$ 1"?
Джишну У Наир

И скрипт выдает ошибку grep: входной файл `mycron 'также является выходным
Jishnu U Nair

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

@JishnuUNair Вы уверены, что правильно скопировали приведенный выше текст?
devnull

да, я правильно скопировал.
Джишну У Наир

1

от Bash я использую

    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/…
Грэм,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.