ubuntuusers.de

Cronjob programmieren funktioniert nicht

Status: Ungelöst | Ubuntu-Version: Ubuntu 18.04 (Bionic Beaver)
Antworten |

X3nion

Anmeldungsdatum:
28. April 2020

Beiträge: 13

Hallo zusammen!

Ich würde gerne einen Cronjob machen, der jede Minute oder alle 5 Minuten eine Shell startet: Ich habe mittels crontab -e den Crontab wie folgt editiert:

*/1 * * * * bash /home/user/Linuxfertig.sh
#

Die Linuxfertig.sh beginnt mit:

1
#!/bin/bash 

Was mache ich falsch, dass der Cronjob nicht jede Minute ausgeführt wird? Wenn ich die Linuxfertig.sh manuell starte, funktioniert alles einwandfrei!

Ich wäre euch für jede Hilfe sehr dankbar!

Viele Grüße, X3nion

Bearbeitet von rklm:

Codeblöcke. Bitte beachte Forum/Syntax und nutze die Vorschaufunktion

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17607

Wohnort: Berlin

Woran merkst Du, dass es nicht funktioniert?

Mal in die Logfiles geschaut?

Steht der Ort, an dem bash ist, vielleicht nicht im Cronpath?

Wozu überhaupt über bash starten, und nicht Linuxfertig.sh ausführbar machen und mit einem Shebang versehen?

X3nion

(Themenstarter)

Anmeldungsdatum:
28. April 2020

Beiträge: 13

Hmm wie könnte ich ein Logfile erzwingen? Und wie meinst du das mit den Paths? Die Shell müsste mir 'ne Mail zusenden beim Korrekten Ausführen.

Viele Grüße, Christian

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4450

Wohnort: Göttingen

Also mach das Skript mal bitte ausführbar mit

chmod +x /home/user/Linuxfertig.sh

Dann lösche ich der Crontab das bash vor dem Skriptnamen.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13177

In der Ubuntu-Version würde ich das ja durch einen Systemd-Timer erledigen. Dann kann Dein Skript auch einfach auf Stdout und Stderr schreiben und Du würdest das im Journal sehen. Das hilft auch beim Debuggen; Du kannst z.B. oben im Skript set -x unterbringen und bekommst dann alle Kommandos auf Stderr ausgegeben, die die Shell ausführt.

X3nion

(Themenstarter)

Anmeldungsdatum:
28. April 2020

Beiträge: 13

Hi zusammen und vielen Dank euch!

Hmm habe jetzt chmod +x /home/user/Linuxfertig.sh

in das Terminal geschrieben. Die Shell lässt sich nun ohne Bash öffnen, einfach /home/user/Linuxfertig.sh eingeben.

Dann hab ich in crontab -e den bash-Befehl gelöscht. Geht leider immer noch nicht :/

Viele Grüße, X3nion

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4450

Wohnort: Göttingen

Hm, zeig doch mal dein Skript her.

X3nion

(Themenstarter)

Anmeldungsdatum:
28. April 2020

Beiträge: 13

Das hier ist die Linuxfertig.sh

#!/bin/bash
Std=$(date +"%H")
Min=$(date +"%M")

Minges=$(($Std * 60 + $Min))
Minges1=$(($Minges - 1))
Minges2=$(($Minges - 2))
Minges3=$(($Minges - 3))
Minges4=$(($Minges - 4))


if [ $Minges -eq 3 ]
then
Std1=0
Min1=3
Std2=0
Min2=2
Std3=0
Min3=1
Std4=0
Min4=0
Std5=23
Min5=59
else 
if [ $Minges -eq 2 ]
then
  Std1=0
  Min1=2
  Std2=0
  Min2=1
  Std3=0
  Min3=0
  Std4=23
  Min4=59
  Std5=23
  Min5=58
else
if [ $Minges -eq 1 ]
then
  Std1=0
  Min1=1
  Std2=0
  Min2=0
  Std3=23
  Min3=59
  Std4=23
  Min4=58
  Std5=23
  Min5=57
else
if [ $Minges -eq 0 ]
then
  Std1=0
  Min1=0
  Std2=23
  Min2=59
  Std3=23
  Min3=58
  Std4=23
  Min4=57
  Std5=23
  Min5=56
else
Std1=$(($Minges / 60))
Min1=$(($Minges % 60))
Std2=$(($Minges1 / 60))
Min2=$(($Minges1 % 60))
Std3=$(($Minges2 / 60))
Min3=$(($Minges2 % 60))
Std4=$(($Minges3 / 60))
Min4=$(($Minges3 % 60))
Std5=$(($Minges4 / 60))
Min5=$(($Minges4 % 60))
fi   
fi
fi
fi

if [ $Min1 -lt 10 ]
then
Minneu1=0$Min1
else
Minneu1=$Min1
fi

if [ $Min2 -lt 10 ]
then
Minneu2=0$Min2
else
Minneu2=$Min2
fi

if [ $Min3 -lt 10 ]
then
Minneu3=0$Min3
else
Minneu3=$Min3
fi

if [ $Min4 -lt 10 ]
then
Minneu4=0$Min4
else
Minneu4=$Min4
fi

if [ $Min5 -lt 10 ]
then
Minneu5=0$Min5
else
Minneu5=$Min5
fi

if [ $Std1 -lt 10 ]
then
Stdneu1=0$Std1
else
Stdneu1=$Std1
fi

if [ $Std2 -lt 10 ]
then
Stdneu2=0$Std2
else
Stdneu2=$Std2
fi

if [ $Std3 -lt 10 ]
then
Stdneu3=0$Std3
else
Stdneu3=$Std3
fi

if [ $Std4 -lt 10 ]
then
Stdneu4=0$Std4
else
Stdneu4=$Std4
fi

if [ $Std5 -lt 10 ]
then
Stdneu5=0$Std5
else
Stdneu5=$Std5
fi

Betrag1=Heute,\ $Stdneu1:$Minneu1
Betrag2=Heute,\ $Stdneu2:$Minneu2
Betrag3=Heute,\ $Stdneu3:$Minneu3
Betrag4=Heute,\ $Stdneu4:$Minneu4
Betrag5=Heute,\ $Stdneu5:$Minneu5

echo $Betrag1
echo $Betrag2
echo $Betrag3
echo $Betrag4
echo $Betrag5

>/home/name/out.txt curl -k "https://www.ebay-kleinanzeigen.de/s-wohnung-mieten/ravensburg/c203l9220r10+wohnung_mieten.zimmer_d:1,2"
if [ "$(grep -c "$Betrag1\|$Betrag2\|$Betrag3\|$Betrag4\|$Betrag5" /home/name/out.txt)" -ge 1 ] 
then curl 'smtps://securesmtp.t-online.de:465' --ssl-reqd --cacert cacert.pem -u 'username@t-online.de:password' -i -H 'Application: Application/json' --mail-from 'username@t-online.de' --mail-rcpt 'username@t-online.de' -T /home/name/Mail.txt 
fi

Das hier mein crontab:

*/5 * * * * /home/name/Linuxfertig.sh
  

Viele Grüße, X3nion

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4450

Wohnort: Göttingen

Schreib mal folgendes in die erste Zeile deiner Crontab oder in dein Skript:

PATH=/usr/bin:/bin

Undsteht am Ende wirklich das curl hinter der Dateiumleitung? Das müsstest Du natürlich ändern.

X3nion

(Themenstarter)

Anmeldungsdatum:
28. April 2020

Beiträge: 13

Meinst du den Befehl vor oder nach #!/bin/bash? Oder kommt #!/bin/bash komplett weg?

Und wo meinst das mit curl, kannst du mir die Stelle zeigen?

Viele Grüße, X3nion

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4450

Wohnort: Göttingen

Die PATH Anweisung muss hinter die Shebang, also in die zweite Zeile.

Und mit dem curl meinte ich das hier (in der viertletzten Zeile):

>/home/name/out.txt curl -k "https://www.ebay-klei....

X3nion

(Themenstarter)

Anmeldungsdatum:
28. April 2020

Beiträge: 13

Okay dann habe ich das in der Shell so am Anfang. Passt das so?

#!/bin/bash
PATH=/usr/bin:/bin

Und wie müsste der curl-Befehl dann aussehen? Ich finde es komisch, manuell gestartet im Terminal funktioniert es so einwandfrei.

Viele Grüße X3nion

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4450

Wohnort: Göttingen

Ja, das sieht gut so aus. Und wenn das in der Bash richtig funktioniert, ist es ja gut. Ich hätte halt gedacht, dass das eher so aussehen muss:

>/home/name/out.txt 
curl -k "https://www.eb...

X3nion

(Themenstarter)

Anmeldungsdatum:
28. April 2020

Beiträge: 13

Hmm wenn ich das mit einem Zeilenabsatz schreibe wie du, dann zeigt er die ganze Internetseite im Terminal an, ohne den Zeilenabsatz bleibt er latent in der Textdatei.

Wieso geht nun aber der crontab nicht? Hast du da eine Idee?

Viele Grüße, X3nion

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4450

Wohnort: Göttingen

Schau mal in dein Syslog oder Cronlog, ob der Cronjob überhaupt aufgerufen wird. Das müsste /var/log/syslog oder /var/log/cron.log sein.

Antworten |