Instalowanie crontab przy użyciu skryptu bash


11

Stworzyłem skrypt, aby zainstalować dwa skrypty na 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

Skrypt jest uruchamiany i dodaje dwie linie do crontab. Ale jeśli ponownie uruchomię skrypt, ponownie doda te wiersze, więc będę miał cztery wiersze z tym samym tekstem. Chcę, aby skrypt instalacyjny działał tak, aby wiersze wstawione do crontab się nie powtarzały. Jak mogę to zrobić


Nie rozumiem, jaki jest twój cel? dlaczego napisałeś go w pierwszej kolejności? Edytuj i dodaj informacje w oryginalnym poście. tks
X Tian

Odpowiedzi:


19

Poleciłbym użyć /etc/cron.dponad crontab.

Możesz umieszczać pliki, w /etc/cron.dktórych zachowują się jak wpisy crontab. Chociaż format jest nieco inny.

Na przykład
/etc/cron.d/pcap:

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

Różnica w formacie polega na dodaniu użytkownika do uruchomienia zadania, tak jak po specyfikacji czasu.

Teraz możesz po prostu sprawdzić, czy plik istnieje, a jeśli go zastąpisz, nie ma to znaczenia.

 

Zauważ, że możliwe, że twój demon cron może nie mieć /etc/cron.d. Nie wiem, które demony cron je mają, ale vixie cron jest standardowym demonem cron na Linuksie i tak jest.


3

Zamiast tego możesz zadeklarować funkcję:

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

i przywołaj to, mówiąc:

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

Doprowadziłoby to do dodania linii tylko wtedy, gdy nie ma jej w pliku.


czy możesz powiedzieć, co robi grep -Fq „$ 1”?
Jishnu U Nair

A skrypt podaje błąd grep: plik wejściowy `mycron 'jest również wyjściem
Jishnu U Nair

@JishnuUNair -Fstałaby grepinterpretować jako wzorzec stałej łańcucha.
devnull

@JishnuUNair Czy na pewno poprawnie skopiowałeś powyższy tekst?
devnull

tak, skopiowałem go poprawnie.
Jishnu U Nair

1

z bash używam

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

Użyj również tego skryptu, aby dodać wpisy cron na zdalnych serwerach

    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

Możesz napisać skrypt i dodać go do crontab, aby go zatrzymać:

####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
To nie odpowiada na pytanie. Ponadto kill -9należy to robić tylko w ostateczności - unix.stackexchange.com/questions/8916/...
Graeme
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.