Siduction Forum
Siduction Forum => Software - Support => Topic started by: tomsiduction on 2021/11/24, 15:27:45
-
Hallo
Ich habe bitte eine Frage an die Wissenden.
Ich will folgenden Cron-Job installieren:
cp /etc/lo.dnsmasq /etc/resolvconf/run/interface/lo.dnsmasq
Ich habe in /etc/crontab folgendes eingetragen:
0**** root cp /etc/lo.dnsmasq /etc/resolvconf/run/interface/lo.dnsmasq
daneben habe ich auch noch ein- auf der Kommandozeile funktioniernde - *.sh Datei erstellt
und deshalb zusätzlich in crontab eingetragen.
0**** root /etc/cron.hourly/internet.sh
Aber es funktioniert nicht
Was mache ich falsch?
Vielen Dank
-
Hi
30 19 * * * /bin/bash --login /pfad/pfad/Script.sh
Event. so . Wenn dein Script im Terminal läuft. Habe irgendwo im Hinterkopf das es einen Unterschied gibt ob du
im Terminal oder per Cron das Script startest.
Balou
-
Evtl. liege ich ja falsch aber cron bzw crontab hat keine eigenen Umgebungsvariablen und damit auch keine Standardpfade, dh Du müßtest eigentlich immer den vollen Pfad zu einem Befehl angeben, also nicht "cp" sondern "/bin/cp"
Aber ob das immer noch so ist? Und ob das ursächlich für deine Probleme ist? Keine Ahnung, im Zweifel probieren.
-
Etwas Lesestoff ;)
https://www.stetic.com/developer/cronjob-linux-tutorial-und-crontab-syntax/
-
Vielen Dank an alle
@ Geier0815 Ich habe den vollen Pfad angegeben - ohne greifbares Ergebnis
@ Balu Ich habe "/bin/bash --login" vorangestellt - ohne greifbares Ergebnis
@ unklarer Vielen Dank für den Tipp - ich habe leider nichts zu meinem Problem
gefunden.
Nochmals besten Dank an Alle
-
Hi
Gibt es keine Fehlermeldung im Log?
Mit /usr/bin/cp geht es bei mir jedenfalls.
Balou
-
Hallo und vielen Dank
Auch /usr/bin/cp führt nicht zum Erfolg.
journalctl -k zeigt keinen Fehler.
Oder schaue ich im verkehrten log-file?
Ein /var/log/cron.log existiert bei mir nicht.
Vielen Dank
-
Hi
journalctl --since yesterday -u cron.service
Balou
-
Wichtig ist erst einmal ins journal zu gucken.
Meine Vermutung ist in die Richtung gehend, dass die crontab in deinem ersten Fall die Optionen durch das Leerzeichen nicht cp zuordnet und deshalb damit nichts anfangen kann. Versuch bitte mal den gesamten cp-Befehl zu "escapen" indem Du die Optionen in doppelte Anführungszeichen setzt cp "/XXX/bla /YYY/bla"
Ansonsten für deinen zweiten Fall (script per cron), nimm den Aufruf innerhalb der crontab raus. Wenn das script unterhalb von cron.daily (hourly) oder wie auch immer liegt, wird es ausgeführt wenn cron.daily (hourly) durch cron aufgerufen wird. Den Zeitpunkt siehst Du in der crontab. Achte darauf das das script ein ausführbares bash(zsh,whatever-sh)-script ist, also das der shebang drin ist und alle Befehle etc mit vollständigem Pfad aufgerufen werden.
Für die Pfade zu den Befehlen kannst Du (noch) den which-Befehl verwenden und den zusätzliche Hinweis erst einmal ignorieren
which cp
/usr/bin/which: this version of `which' is deprecated; use `command -v' in scripts instead.
/bin/cp
in meinem Fall würde ich also /bin/cp verwenden.
-
Hallo und vielen Dank
Mein Befehl in der /etc/crontab sieht nun wie folgt aus:
0**** root /bin/cp "/etc/lo.dnsmasq /etc/resolvconf/run/interface/lo.dnsmasq"
Leider geht es noch nicht.
Vielen Dank
-
@tomsuduction
Du bist dir sicher das Cron auch läuft?
systemctl status cron
Du postet deinen Eintrag nicht im Codeblock. Hast du zwischen 0 und den * eine Leerstelle?
0****
oder
0 * * * *
Ich meine die Schreibweise mit Leerzeichen ist richtig
Balou
-
Cronjob-scripte dürfen kein Suffix haben! Sonst ignore...
...
-
Hallo und vielen Dank
Meine unveränderte crontab zeigt
cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-11-25 17:35:50 CET; 21h ago
Docs: man:cron(8)
Main PID: 710 (cron)
Tasks: 1 (limit: 9365)
Memory: 676.0K
CPU: 424ms
CGroup: /system.slice/cron.service
└─710 /usr/sbin/cron -f
Nov 26 14:21:01 siduction cron[710]: (*system*) RELOAD (/etc/crontab)
Nov 26 14:21:01 siduction cron[710]: Error: bad hour; while reading /etc/crontab
Nov 26 14:21:01 siduction cron[710]: (*system*) ERROR (Syntax error, this crontab file will be ignored)
Wie gesagt, die unveränderte Crontab-Datei zeigt diesen Fehler
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
Wo sitzt der Fehler?
Vielen Dank
-
Ich habe mir deine crontab kopiert und bei mir in meine crontab geschrieben.
Keine probleme.
Ich würde mal die Einträge auskommentieren mit #
Weiß jetzt auch nicht an welcher Stelle es noch klemmt.
Balou
-
@Balou,
Ich nehme an das die Fehlermeldung noch aus der Zeit stammt als der Eintrag zum Kopieren drin war.
@tomsiduction,
Du hast die Frage noch nicht beantwortet: Waren bei deiner Zeile zwischen den Sternen Leerzeichen oder nicht?
-
Hallo und vielen Dank
Ich hatte (leider) keine Leerzeichen zwischen den Sternchen; jetzt aber schon
Nochmals vielen Dank
-
Hallo
So, jetzt bin ich ein Stück weiter (vielen Dank an Alle)
systemctl status cron ist nun sauber:
Nov 26 16:36:13 siduction CRON[13287]: (root) CMD ([ -x /etc/init.d/anacron ] && if [ ! -d /run/systemd/system ]; t>
Nov 26 16:36:13 siduction CRON[13282]: pam_unix(cron:session): session closed for user root
Nov 26 16:41:01 siduction cron[710]: (*system*) RELOAD (/etc/crontab)
Nov 26 17:00:01 siduction CRON[13760]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
Nov 26 17:00:01 siduction CRON[13761]: (root) CMD (/bin/cp "/etc/lo.dnsmasq /etc/resolvconf/run/interface/lo.dnsmas>
Nov 26 17:00:01 siduction CRON[13760]: (CRON) info (No MTA installed, discarding output)
Nov 26 17:00:01 siduction CRON[13760]: pam_unix(cron:session): session closed for user root
Nov 26 17:17:01 siduction CRON[13986]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
Nov 26 17:17:01 siduction CRON[13987]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Nov 26 17:17:01 siduction CRON[13986]: pam_unix(cron:session): session closed for user root
Die Datei crontab sieht nun wie folgt aus:
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
0 * * * * root /bin/cp /etc/lo.dnsmasq /etc/resolvconf/run/interface/lo.dnsmasq
#
Mit und ohne "" funktioniert es nicht -( das Skript soll 1 x pro Stunde laufen)
Vielen Dank fürs Mitdenken
-
So, und nun schaust Du bitte in das journal weil im Status nur registriert wird ob der Dienst an sich arbeitet. Mögliche Fehlermeldungen die durch Befehle innerhalb der crontab ausgelöst werden schlagen (mutmaßlich) da nicht rein sondern ins journal.
Wie Balou schon schrieb: journalctl --since yesterday -u cron.service
und bis ans Ende gehen, damit solltest Du zumindest einen Anhaltspunkt finden.
-
Hallo und ganz vielen Dank
So schaut das Journal aus und es funktioniert alles:
Nov 26 17:23:01 siduction cron[710]: (*system*) RELOAD (/etc/crontab)
Nov 26 17:30:01 siduction CRON[14110]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
Nov 26 17:30:01 siduction CRON[14110]: pam_unix(cron:session): session closed for user root
Nov 26 18:00:01 siduction CRON[14407]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
Nov 26 18:00:01 siduction CRON[14408]: (root) CMD (/bin/cp /etc/lo.dnsmasq /etc/resolvconf/run/interface/lo.dnsmasq)
Nov 26 18:00:01 siduction CRON[14407]: pam_unix(cron:session): session closed for user root
Nov 26 18:17:01 siduction CRON[14542]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
Nov 26 18:17:01 siduction CRON[14542]: pam_unix(cron:session): session closed for user root
Nov 26 18:30:01 siduction CRON[14647]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
Nov 26 18:30:01 siduction CRON[14648]: (root) CMD ([ -x /etc/init.d/anacron ] && if [ ! -d /run/systemd/system ]; t>
Nov 26 18:30:01 siduction CRON[14647]: pam_unix(cron:session): session closed for user root
Nov 26 19:00:01 siduction CRON[15338]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
Nov 26 19:00:01 siduction CRON[15339]: (root) CMD (/bin/cp /etc/lo.dnsmasq /etc/resolvconf/run/interface/lo.dnsmasq)
Nov 26 19:00:01 siduction CRON[15338]: pam_unix(cron:session): session closed for user root
Ganz herzlichen Dank an alle Mithelfenden.