531 Stimmen

Wie erstellt man einen Cron-Job mit der Bash automatisch ohne den interaktiven Editor?

Verfügt crontab über ein Argument zur Erstellung von Cron-Jobs ohne Verwendung des Editors (crontab -e). Wenn ja, wie würde der Code lauten, um einen Cronjob aus einem Bash-Skript zu erstellen?

0 Stimmen

14 Stimmen

Leider zeigen die meisten Top-Antworten hier nur, wie man crontab modifiziert - wenn auch auf einigermaßen sichere Weise - aber ich denke, das ist insgesamt der falsche Ansatz. Besser, sicherer und einfacher ist es, eine Datei in {{cron.d}} abzulegen, und es gibt (derzeit) wenig beachtete Antworten, die erklären, wie man das macht, wenn man weiter unten sucht.

0 Stimmen

Danke @gregmac. Ich habe hinzugefügt dieses Beispiel nachdem ich Beispiele von verschiedenen Seiten gelesen und es selbst ausprobiert habe.

1voto

Klas Mellbourn Punkte 38752

Hier ist eine Bash-Funktion zum Hinzufügen eines Befehls zu crontab ohne Duplikation

function addtocrontab () {
  local frequency=$1
  local command=$2
  local job="$frequency $command"
  cat <(fgrep -i -v "$command" <(crontab -l)) <(echo "$job") | crontab -
}
addtocrontab "0 0 1 * *" "echo hello"

1voto

speefak Punkte 5
CRON="1 2 3 4 5 /root/bin/backup.sh" 
cat < (crontab -l) |grep -v "${CRON}" < (echo "${CRON}")

Hinzufügen des Parameters -w zum Befehl grep exact, ohne den Parameter -w führt das Hinzufügen des Cronjobs "testing" zur Löschung des Cronjobs "testing123"

Skriptfunktion zum Hinzufügen/Entfernen von Cronjobs. keine doppelten Einträge :

cronjob_editor () {         
# usage: cronjob_editor '<interval>' '<command>' <add|remove>

if [[ -z "$1" ]] ;then printf " no interval specified\n" ;fi
if [[ -z "$2" ]] ;then printf " no command specified\n" ;fi
if [[ -z "$3" ]] ;then printf " no action specified\n" ;fi

if [[ "$3" == add ]] ;then
    # add cronjob, no duplication:
    ( crontab -l | grep -v -F -w "$2" ; echo "$1 $2" ) | crontab -
elif [[ "$3" == remove ]] ;then
    # remove cronjob:
    ( crontab -l | grep -v -F -w "$2" ) | crontab -
fi 
} 
cronjob_editor "$1" "$2" "$3"

getestet:

$ ./cronjob_editor.sh '*/10 * * * *' 'echo "this is a test" > export_file' add
$ crontab  -l
$ */10 * * * * echo "this is a test" > export_file

0voto

andcoz Punkte 2192

Nein, es gibt keine Option in crontab, um die Cron-Dateien zu ändern.

Sie müssen: die aktuelle Cron-Datei nehmen (crontab -l > newfile), sie ändern und die neue Datei an ihre Stelle setzen (crontab newfile).

Wenn Sie mit Perl vertraut sind, können Sie dieses Modul verwenden Konfig::Crontab .

LLP, Andrea

0voto

Skriptfunktion zum Hinzufügen von Cronjobs. doppelte Einträge prüfen, brauchbare Ausdrücke * > "

cronjob_creator () {         
# usage: cronjob_creator '<interval>' '<command>'

  if [[ -z $1 ]] ;then
    printf " no interval specified\n"
elif [[ -z $2 ]] ;then
    printf " no command specified\n"
else
    CRONIN="/tmp/cti_tmp"
    crontab -l | grep -vw "$1 $2" > "$CRONIN"
    echo "$1 $2" >> $CRONIN
    crontab "$CRONIN"
    rm $CRONIN
fi
}

getestet:

$ ./cronjob_creator.sh '*/10 * * * *' 'echo "this is a test" > export_file'
$ crontab  -l
$ */10 * * * * echo "this is a test" > export_file

Quelle: mein Gehirn ;)

0voto

Juno Sprite Punkte 111

Angenommen, Sie sind als Benutzer "ubuntu" eingeloggt, möchten aber einen Job zur Crontab eines anderen Benutzers hinzufügen, z. B. "john". Sie können Folgendes tun:

(sudo crontab -l -u john; echo "* * * * * command") | awk '!x[$0]++' | sudo crontab -u john -

Quelle für den größten Teil dieser Lösung: https://www.baeldung.com/linux/create-crontab-script

Ich hatte eine Menge Probleme, als ich versuchte, einen Job zu die crontab eines anderen Benutzers . Es duplizierte immer wieder Crontabs oder löschte sie ganz einfach. Nach einigen Tests bin ich jedoch zuversichtlich, dass diese Codezeile anhängen. einen neuen Auftrag in die Crontab eines bestimmten Benutzers einfügen, und zwar nicht-destruktiv, d. h. auch keinen Auftrag erstellen, der bereits existiert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X