debian 8 bash Skript über crontab starten

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
mgolbs
Beiträge: 259
Registriert: 22.03.2009 18:08:17
Wohnort: Tirschenreuth - Löbau

debian 8 bash Skript über crontab starten

Beitrag von mgolbs » 13.12.2017 09:38:31

Hallo,

ich habe einige kleine bash Skripte geschrieben die per Start in Konsole so laufen/arbeiten wie gewünscht. Leider funktionieren diese per crontab nicht. Ich gehe davon aus das "cron Interpreter" und bash nicht identisch sind. Verschiedene Dokumentationen und Lösungsansätze habe ich ohne Erfolg versucht.

Code: Alles auswählen

#!/bin/bash
SHELL=/bin/bash
#/bin/bash --login /home/username/

Code: Alles auswählen

SHELL=/bin/bash
PATH=/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/X11
#5 16 * * * /usr/bin/clamscan --exclude-dir=.thunderbird --exclude-dir=.mozilla-thunderbird --exclude-dir=.evolution --exclude-dir=Mail --exclude-dir=km$
#5 15 * * * /usr/bin/freshclam --datadir=/home/hagolbsm/.clamtk/db --log=/home/hagolbsm/.clamtk/db/freshclam.log # clamtk-defs
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
0 7-17 * * * /home/....

Was muss ich in den Skripten bzw. im crontab eintragen um das Problem zu lösen? Über Tipps und Hinweise wäre ich dankbar.

Gruß Markus
Dem Überflüssigen nachlaufen, heißt das Wesentliche verpassen.
Jules Saliège

Benutzeravatar
MSfree
Beiträge: 10725
Registriert: 25.09.2007 19:59:30

Re: debian 8 bash Skript über crontab starten

Beitrag von MSfree » 13.12.2017 10:10:25

mgolbs hat geschrieben: ↑ zum Beitrag ↑
13.12.2017 09:38:31
Was muss ich in den Skripten bzw. im crontab eintragen um das Problem zu lösen?
Im Grunde mußt du dort gar nichts weiter eintragen, selbst die PATH und SHELL Direktiven sind nicht nötig.

Unter welchem Benutzerkonto sollen die Jobs laufen?

Hast du schon die Logs durchgesehen, was schief läuft?

mgolbs
Beiträge: 259
Registriert: 22.03.2009 18:08:17
Wohnort: Tirschenreuth - Löbau

Re: debian 8 bash Skript über crontab starten

Beitrag von mgolbs » 13.12.2017 10:37:03

Hallo,

vielen Dank für die Antwort.
" Unter welchem Benutzerkonto sollen die Jobs laufen?
Unter meinem normalen Nutzer.
Hast du schon die Logs durchgesehen, was schief läuft?
Unter /var/log/???? finde ich irgend wie nichts. Wo muss ich da suchen? Muss ich cron log einschalten?

Gruß und Dank Markus
Dem Überflüssigen nachlaufen, heißt das Wesentliche verpassen.
Jules Saliège

Benutzeravatar
MSfree
Beiträge: 10725
Registriert: 25.09.2007 19:59:30

Re: debian 8 bash Skript über crontab starten

Beitrag von MSfree » 13.12.2017 10:44:54

mgolbs hat geschrieben: ↑ zum Beitrag ↑
13.12.2017 10:37:03
Unter meinem normalen Nutzer.
Normale Benutzer dürfen per Default cron nicht benutzen. Da wird also dein Problem bereits liegen.
Um normalen Benutzern die Benutzung von cron zu erlauben, mußt du als root die Datei /etc/cron.allow anlegen und dort die Benutzernamen eintragen, die cron benutzen dürfen.
Unter /var/log/?
Welche Debianversion?

Ab Jessie wurde Debian auf Systemd umgestellt, was auch das Logging grunsätzlich verändert hat (kann man aber, wenn man will, wieder auf altes Verhalten zurück konfigurieren)

journalctl ist dein Freund, das liefert die gelogten Meldungen.

mgolbs
Beiträge: 259
Registriert: 22.03.2009 18:08:17
Wohnort: Tirschenreuth - Löbau

Re: debian 8 bash Skript über crontab starten

Beitrag von mgolbs » 13.12.2017 11:05:23

Hallo,

vielen Dank für die Infos. Ich nutze Debian 8.
Normale Benutzer dürfen per Default cron nicht benutzen.
Das ist komisch, denn andere Einträge im "crontab -e" unter meinem normalen Nutzer laufen problemlos???

Habe /etc/cron.allow angelegt und meinen user Namen eingefügt. Muss ich den Dienst neu starten?

..journalctl ist bei mir unter Debian 8.0 nicht drauf.

Gruß und Dank Markus
Dem Überflüssigen nachlaufen, heißt das Wesentliche verpassen.
Jules Saliège

BenutzerGa4gooPh

Re: debian 8 bash Skript über crontab starten

Beitrag von BenutzerGa4gooPh » 13.12.2017 11:19:54

mgolbs hat geschrieben: ↑ zum Beitrag ↑
13.12.2017 11:05:23
..journalctl ist bei mir unter Debian 8.0 nicht drauf.
:mrgreen:

Code: Alles auswählen

man journalctl
sudo journalctl
oder
su -
journalctl
https://manpages.debian.org/jessie/syst ... .1.en.html
http://www.linux-magazin.de/ausgaben/20 ... d-journal/

Benutzeravatar
MSfree
Beiträge: 10725
Registriert: 25.09.2007 19:59:30

Re: debian 8 bash Skript über crontab starten

Beitrag von MSfree » 13.12.2017 11:43:38

mgolbs hat geschrieben: ↑ zum Beitrag ↑
13.12.2017 11:05:23
Das ist komisch, denn andere Einträge im "crontab -e" unter meinem normalen Nutzer laufen problemlos?
Ist der Nutzer Mitglied der Gruppe "crontab"?

tobo
Beiträge: 1989
Registriert: 10.12.2008 10:51:41

Re: debian 8 bash Skript über crontab starten

Beitrag von tobo » 13.12.2017 14:43:10

mgolbs hat geschrieben: ↑ zum Beitrag ↑
13.12.2017 11:05:23
Das ist komisch, denn andere Einträge im "crontab -e" unter meinem normalen Nutzer laufen problemlos???
Ja, so ist das mit der benutzerspezifischen Crontab auch angedacht. Du musst da in keiner Gruppe sein oder spezielle Berechtigungsdateien anlegen.

Am besten zeigst du einfach mal ein Skript das mittels Cron nicht funktioniert und dessen genauen Aufruf in der Crontab?! Das da oben ist ja wenig aufschlussreich...

mgolbs
Beiträge: 259
Registriert: 22.03.2009 18:08:17
Wohnort: Tirschenreuth - Löbau

Re: debian 8 bash Skript über crontab starten

Beitrag von mgolbs » 13.12.2017 17:25:51

Hallo,

habe in 3 Skripte unterteilt. Musste den Inhalt etwas anonymisieren.
1.

Code: Alles auswählen

#!/bin/bash
cd /home/....../......./
lftp ffffff_hhhhh:dddddd@10.zzz.zzz.zzz/  << EOF
mirror
quit
bye
EOF
2.

Code: Alles auswählen

#!/bin/bash
curlftpfs -o nonempty ftp://10.zzz.zzzz.zzzz/ /home/...../...._..../ -o user=ffffff_hhhh:ddddd,utf8
cd /home/....../....._...../
cp -r -u *.gz /home/...../.................../..../....../....../. /home/....../ffffff_hhhhhh/
cp -r -u *.h5 /home/...../...../...../....../...../...../. /home/...../fffff_hhhhh/
3.

Code: Alles auswählen

#!/bin/bash
fusermount -u /home/...../ffff_hhhhh/
4. crontab -e

Code: Alles auswählen

SHELL=/bin/bash
PATH=/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/X11
#5 16 * * * /usr/bin/clamscan --exclude-dir=.thunderbird --exclude-dir=.mozilla-thunderbird --exclude-dir=.evolution --exclude-dir=Mail --exclude-dir=km$
#5 15 * * * /usr/bin/freshclam --datadir=/home/...../.clamtk/db --log=/home/......./.clamtk/db/freshclam.log # clamtk-defs
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
22 * * * * /home/....../.......-......-Teil-.....-1.sh
23 * * * * /home/....../.......-......-Teil-.....-2.sh
25 * * * * /home/....../.......-......-Teil-.....-3.sh
# Ende
Gruß und Dank Markus
Dem Überflüssigen nachlaufen, heißt das Wesentliche verpassen.
Jules Saliège

tobo
Beiträge: 1989
Registriert: 10.12.2008 10:51:41

Re: debian 8 bash Skript über crontab starten

Beitrag von tobo » 13.12.2017 20:43:17

Man kann also davon ausgehen, dass die Skripte ausführbar sind und Cron läuft. Jetzt solltest du überprüfen, ob die Skripte nicht ausgeführt werden oder ob sie bei ihrer Ausführung scheitern. Dazu kannst du dir das Syslog mit less /var/log/syslog und die Systemmails mit mailx anschauen. Testweise könnte man die auch minütlich laufen lassen und irgendeinen zusätzlichen Output mit echo/printf in den Skripten generieren, da Cron selbst nichts ausgibt. Ansonsten - ich sehe da jetzt eigentlich nichts, was da noch Fehlerursache sein könnte (von den Befehlen selbst mal abgesehen) und spezifisch zu Jessie fällt mir auch keine Änderung ein!?

mgolbs
Beiträge: 259
Registriert: 22.03.2009 18:08:17
Wohnort: Tirschenreuth - Löbau

Re: debian 8 bash Skript über crontab starten

Beitrag von mgolbs » 13.12.2017 21:50:38

Hallo,

vielen Dank für die Information.
Man kann also davon ausgehen, dass die Skripte ausführbar sind und Cron läuft,
Ich würde JA sagen.
/var/log/syslog und Systemmails
Hier die Ausgabe: [Rechner heißt noch debian7,distupgrade, ist aber 8.]
Dec 14 08:05:01 debian7 /USR/SBIN/CRON[27267]: (benutzer) CMD (/home/benutzer/.....-Teil-A.sh)
Dec 14 08:06:01 debian7 /USR/SBIN/CRON[27271]: (benutzer) CMD (cp -u -R /home/benutzer/...../. /home/benutzer/...../...../.....)
Dec 14 08:12:01 debian7 /USR/SBIN/CRON[27273]: (benutzer) CMD (/home/benutzer/......-Teil-B.sh)
Dec 14 08:13:01 debian7 /USR/SBIN/CRON[27277]: (benutzer) CMD (/home/benutzer/.......-C.sh)
Dec 14 08:15:01 debian7 /USR/SBIN/CRON[27294]: (benutzer) CMD (/home/benutzer/2........_produktiv.sh)
Dec 14 08:17:01 debian7 /USR/SBIN/CRON[27361]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Dec 14 08:17:01 debian7 /USR/SBIN/CRON[27363]: (root) CMD (/sbin/ifconfig > /home/benutzer/......./ifconfig.txt)
Dec 14 08:18:01 debian7 /USR/SBIN/CRON[27366]: (root) CMD (chmod 0777 /home/benutzer/....../ifconfig.txt)
Dec 14 08:21:01 debian7 /USR/SBIN/CRON[27369]: (benutzer) CMD (cp -u -R /home/benutzer/....../. /home/benutzer/...../....../......)
Dec 14 08:22:01 debian7 /USR/SBIN/CRON[27371]: (benutzer) CMD (/home/benutzer/......-1.sh)
Dec 14 08:23:01 debian7 /USR/SBIN/CRON[27375]: (benutzer) CMD (/home/benutzer/......-2.sh)
Dec 14 08:25:01 debian7 /USR/SBIN/CRON[27385]: (benutzer) CMD (/home/benutzer/......-3.sh)
Dec 14 08:30:01 debian7 /USR/SBIN/CRON[27394]: (benutzer) CMD (/home/benutzer/......_produktiv.sh)
Dec 14 08:32:08 debian7 cyrus/master[27465]: about to exec /usr/sbin/cyrus
Dec 14 08:32:08 debian7 cyrus/ctl_cyrusdb[27465]: checkpointing cyrus databases
Dec 14 08:32:08 debian7 cyrus/ctl_cyrusdb[27465]: archiving database file: /var/lib/cyrus/mailboxes.db
Dec 14 08:32:08 debian7 cyrus/ctl_cyrusdb[27465]: archiving database file: /var/lib/cyrus/annotations.db
Dec 14 08:32:08 debian7 cyrus/ctl_cyrusdb[27465]: done checkpointing cyrus databases
Dec 14 08:32:08 debian7 cyrus/master[2500]: process 27465 exited, status 0
Dec 14 08:36:01 debian7 /USR/SBIN/CRON[27471]: (benutzer) CMD (cp -u -R /home/benutzer/...../. /home/benutzer/....../.......)
Dec 14 08:41:01 debian7 /USR/SBIN/CRON[27473]: (benutzer) CMD (cp -u -R /home/benutzer/....../. /home/benutzer/...../.....)
Dec 14 08:45:01 debian7 /USR/SBIN/CRON[27476]: (benutzer) CMD (/home/benutzer/.....A.sh)
Dec 14 08:45:01 debian7 /USR/SBIN/CRON[27477]: (benutzer) CMD (/home/benutzer/.......2_produktiv.sh)
Dec 14 08:47:01 debian7 /USR/SBIN/CRON[27545]: (benutzer) CMD (/home/benutzer/....-1.sh)
Dec 14 08:48:01 debian7 /USR/SBIN/CRON[27549]: (benutzer) CMD (/home/benutzer/.....2.sh)
Dec 14 08:50:01 debian7 /USR/SBIN/CRON[27559]: (benutzer) CMD (/home/benutzer/.....-3.sh)
Dec 14 08:52:01 debian7 /USR/SBIN/CRON[27567]: (benutzer) CMD (/home/benutzer/...-B.sh)
Dec 14 08:53:01 debian7 /USR/SBIN/CRON[27571]: (benutzer) CMD (/home/benutzer/.....-C.sh)
Dec 14 08:59:02 debian7 /USR/SBIN/CRON[27589]: (root) CMD (ntpdate 10.65.2.254)
Dec 14 09:00:01 debian7 /USR/SBIN/CRON[27596]: (benutzer) CMD (/home/benutzer/....._produktiv.sh)
Dec 14 09:01:01 debian7 /USR/SBIN/CRON[27655]: (benutzer) CMD (/home/benutzer/......produktiv.sh)
Dec 14 09:02:09 debian7 cyrus/master[27734]: about to exec /usr/sbin/cyrus
Dec 14 09:02:09 debian7 cyrus/ctl_cyrusdb[27734]: checkpointing cyrus databases
Dec 14 09:02:09 debian7 cyrus/ctl_cyrusdb[27734]: archiving database file: /var/lib/cyrus/mailboxes.db
Dec 14 09:02:09 debian7 cyrus/ctl_cyrusdb[27734]: archiving database file: /var/lib/cyrus/annotations.db
Dec 14 09:02:09 debian7 cyrus/ctl_cyrusdb[27734]: done checkpointing cyrus databases
Dec 14 09:02:09 debian7 cyrus/master[2500]: process 27734 exited, status 0
Dec 14 09:05:01 debian7 /USR/SBIN/CRON[27743]: (benutzer) CMD (/home/benutzer/......-A.sh)
Dec 14 09:06:01 debian7 /USR/SBIN/CRON[27747]: (benutzer) CMD (cp -u -R /home/benutzer/..../. /home/benutzer/..../..../...)
Dec 14 09:12:01 debian7 /USR/SBIN/CRON[27749]: (benutzer) CMD (/home/benutzer/.....-B.sh)
Dec 14 09:13:01 debian7 /USR/SBIN/CRON[27753]: (benutzer) CMD (/home/benutzer/....-C.sh)
Dec 14 09:15:02 debian7 /USR/SBIN/CRON[27792]: (benutzer) CMD (/home/benutzer/......._produktiv.sh)
Dec 14 09:15:37 debian7 crontab[24376]: (benutzer) END EDIT (benutzer)
zusätzlichen Output mit echo/printf in den Skripten generieren
Kann man die Ausgaben der Skripte per Pipe und cron in eine Datei umleiten?

Code: Alles auswählen

Corntab
50 * * * * /home/benutzer/.......-3.sh > /home/benutzer/2017-12-14-....-3.txt
Legt zwar eine Datei an, die ist aber leer.

Als Notlösung habe ich erst einmal versucht:

Code: Alles auswählen

#!/bin/bash
i=1
while i=1 
do
	/home/benutzer/.......-1.sh
	sleep 1620
	/home/benutzer/.......-2.sh
	sleep 60
	/home/benutzer/.......-3.sh
	sleep 60
done
So ein Skript würde ja theoretisch so lange laufen, wie die Linuxmaschine. Worauf müsste man bei diesem Ansatz hinsichtlich Zeitfenster achten?

Über Infos wäre ich dankbar.

Gruß und Dank Markus
Dem Überflüssigen nachlaufen, heißt das Wesentliche verpassen.
Jules Saliège

Antworten