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: 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
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
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
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
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
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
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
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
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.
|