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?
Antworten
Zu viele Anzeigen?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
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
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 ;)
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.
0 Stimmen
Mögliches Duplikat von Wie kann ich programmatisch einen neuen Cron-Job erstellen?
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.
1 Stimmen
@gregmac Verwenden
/etc/cron.daily/
und Freunde scheint Superuser-Rechte zu erfordern.