Crontab mit Bash-Skript installieren

11

Ich habe ein Skript erstellt, um zwei Skripte auf der Crontab zu installieren.

#!/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

Das Skript wird ausgeführt und die beiden Zeilen zur Crontab hinzugefügt. Aber wenn ich das Skript erneut ausführe, werden diese Zeilen erneut hinzugefügt, sodass ich vier Zeilen habe, in denen das gleiche Zeug steht. Ich möchte, dass das Installationsskript so ausgeführt wird, dass sich die in die crontab eingefügten Zeilen nicht wiederholen. Wie kann ich das machen

Jishnu U Nair
quelle
Ich verstehe nicht, was dein Ziel ist? Warum hast du es überhaupt geschrieben? Bitte bearbeite und füge Informationen in deinen ursprünglichen Beitrag ein. tks
X Tian
askubuntu.com/questions/58575/add-lines-to-cron-from-script
Ciro Santilli 法轮功 病毒 审查. 事件 法轮功

Antworten:

18

Ich würde empfehlen, /etc/cron.düber zu verwenden crontab.

Sie können Dateien /etc/cron.dablegen, die sich wie Crontab-Einträge verhalten. Obwohl das Format etwas anders ist.

Zum Beispiel
/etc/cron.d/pcap:

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

Der Unterschied im Format besteht darin, dass der Benutzer hinzugefügt wird, um den Job wie nach der Zeitangabe auszuführen.

Jetzt können Sie einfach überprüfen, ob die Datei vorhanden ist, und wenn Sie sie überschreiben, spielt dies keine Rolle.

 

Beachten Sie, dass Ihr Cron-Daemon möglicherweise nicht über diesen verfügt /etc/cron.d. Ich weiß nicht, welche Cron-Daemons es haben, aber Vixie Cron ist der Standard-Cron-Daemon unter Linux, und das tut es auch.

Patrick
quelle
3

Sie können stattdessen eine Funktion deklarieren:

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

und rufe es auf, indem du sagst:

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

Dies würde die Zeile nur anhängen, wenn sie nicht in der Datei vorhanden ist.

devnull
quelle
Kannst du bitte sagen, was grep -Fq "$ 1" macht?
Jishnu U Nair
Und das Skript gibt Fehler grep: Eingabedatei `mycron 'ist auch die Ausgabe
Jishnu U Nair
@JishnuUNair -Fwürde grepdas Muster als feste Zeichenfolge interpretieren lassen.
devnull
@JishnuUNair Sind Sie sicher, dass Sie den obigen Text korrekt kopiert haben?
devnull
Ja, ich habe es richtig kopiert.
Jishnu U Nair
1

von bash benutze ich

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

Verwenden Sie dieses Skript auch, um Cron-Einträge auf Remote-Servern hinzuzufügen

    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
Markus07
quelle
0

Sie können ein Skript schreiben und es zu crontab hinzufügen, um es zu stoppen:

####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
Persischer Golf
quelle
3
Dies beantwortet die Frage nicht. Auch kill -9sollte nur als letzter Ausweg getan werden - unix.stackexchange.com/questions/8916/…
Graeme