Permalänk
Medlem

Cron-jobb kör ej

Hej,
försöker logga hastigheten av bredbandet hemma så tänkte köra ett simpelt python-script. Scriptet fungerar och loggar korrekt när det körs ensamt men cron-jobbet verkar ej fungera då det ej kommer någon log.

cron:

0 */6 * * * /usr/bin/python3 /home/{user}/speedlog.py

speedlog:

import os.path import speedtest if not(os.path.exists("log.txt")): f = open("log.txt", "w") f.write("Timestamp\t Download\t Upload\t") else: f = open("log.txt","a") servers = [] threads = None s = speedtest.Speedtest() s.get_servers(servers) s.get_best_server() s.get_best_server() s.download(threads=threads) s.upload(threads=threads) s.results.share() res = s.results.dict() download = round(res['download']/10**6) upload = round(res['upload']/10**6) timestamp = res['timestamp'] ping = res['ping'] f.write("\n" + str(timestamp) + "\t" + str(download) + "\t" + str(upload))

Visa signatur

CPU: Ryzen 5600xGPU: 1080 TI ROG Strix RAM:2x16GB G.skill Trident @ 3600MHz MoBo: Asus B550FPSU: Corsair SF750
En resa till Nordkorea
2 dagar i Tjernobyl

Permalänk
Medlem
Skrivet av Pelegrino:

Hej,
försöker logga hastigheten av bredbandet hemma så tänkte köra ett simpelt python-script. Scriptet fungerar och loggar korrekt när det körs ensamt men cron-jobbet verkar ej fungera då det ej kommer någon log.

cron:
[code]
0 */6 * * * /usr/bin/python3 /home/{user}/speedlog.py

"local" saknas inte i /usr/local/bin/python3 ?

Permalänk
Medlem

Är {user} medvetet ditlagt i sökvägen till scriptet? Testa att ge vanlig sökväg istället. Jag tror aldrig att jag har sett någon crontabvariant med stöd för såna variabler, men jag är visserligen ingen crontabexpert.

Är du säker på att cronjobbet arbetar i en katalog där du har skrivbehörighet? Testa att ge absolut sökväg till logfilen, tex "/home/pelegrino/log.txt".

Dessutom körs cronjobbet bara var sjätte timme. Ställ in kortare intervall vid test, eller kanske ett specifikt klockslag.

Permalänk
Avstängd

Jag kör ett antal pythonskript i cron och jag skriver inte så som du gör. Antingen är det på sättet du skriver i cron eller också har du inte satt exekveringsrättigheter på skriptet.

En av raderna ser ut så här.

15 * * * * /home/danne/test_json/nyheter_rss2.py >> ~/cron.log 2>&1

Permalänk
Medlem
Skrivet av 42nd-Guy:

"local" saknas inte i /usr/local/bin/python3 ?

Skrivet av elk:

Är {user} medvetet ditlagt i sökvägen till scriptet? Testa att ge vanlig sökväg istället. Jag tror aldrig att jag har sett någon crontabvariant med stöd för såna variabler, men jag är visserligen ingen crontabexpert.

Är du säker på att cronjobbet arbetar i en katalog där du har skrivbehörighet? Testa att ge absolut sökväg till logfilen, tex "/home/pelegrino/log.txt".

Dessutom körs cronjobbet bara var sjätte timme. Ställ in kortare intervall vid test, eller kanske ett specifikt klockslag.

{user} ersätts med rätt user, det var bara för jag inte kände för att skriva usern (det är alltså inte en variabel)
Det är väl absolut sökväg?

Skrivet av TANDEMCYKELN:

Jag kör ett antal pythonskript i cron och jag skriver inte så som du gör. Antingen är det på sättet du skriver i cron eller också har du inte satt exekveringsrättigheter på skriptet.

En av raderna ser ut så här.

15 * * * * /home/danne/test_json/nyheter_rss2.py >> ~/cron.log 2>&1

Mycket möjligt jag satt fel, flörsta gången jag testat. Satt chmod +x på scripett så den ska ha full exekveringsrättigheter.

Visa signatur

CPU: Ryzen 5600xGPU: 1080 TI ROG Strix RAM:2x16GB G.skill Trident @ 3600MHz MoBo: Asus B550FPSU: Corsair SF750
En resa till Nordkorea
2 dagar i Tjernobyl

Permalänk
Medlem

Vilken crontab använder du, din egen användares eller root?

Permalänk
Avstängd

Kom på en sak till. Tänkte inte på det först. Jag börjar mitt skript med följande. Känns konstigt att inte ha det högst upp i sina pythonskript.

#!/usr/bin/python3

Permalänk
Medlem
Skrivet av CymbalCrasher:

Vilken crontab använder du, din egen användares eller root?

crontab -e

Visa signatur

CPU: Ryzen 5600xGPU: 1080 TI ROG Strix RAM:2x16GB G.skill Trident @ 3600MHz MoBo: Asus B550FPSU: Corsair SF750
En resa till Nordkorea
2 dagar i Tjernobyl

Permalänk
Medlem

Jag har en ganska färsk erfarenhet av att jag inte fick ett cronjob att funka.
Jag kunde köra scriptet manuellt och det funkade kanon. Så schemalade jag det några minuter fram för att se att det kördes automatiskt. Klockan tickade förbi tidpunkten för när scriptet skulle köras, men ingen backup där den borde dyka upp. Hmm...
Jag strulade desperat fram och tillbaka med olika sätt att lägga till scriptet i crontab, inget fungerade.
Efter en stund så lade jag till lite extra loggning i scriptet och till slut så insåg jag att min server låg 2 timmar efter i tid. Jag satt och väntade på att scriptet skulle köras 22:XX, men såg på loggen att det stod 20:XX. Så hade jag väntat 2 timmar så hade scriptet körts..

Har ingen aning om detta är samma problem du stöter på, men det var orsaken till mitt.
Lycka till!

Permalänk
Hedersmedlem
Skrivet av Pelegrino:

crontab -e

Det säger inget om användaren.
Kör du crontab -e som root (eller med sudo) är det som root, annars som din användare.

Visa signatur

Asus ROG STRIX B550-F / Ryzen 5800X3D / 48 GB 3200 MHz CL14 / Asus TUF 3080 OC / WD SN850 1 TB, Kingston NV1 2 TB + NAS / Corsair RM650x V3 / Acer XB271HU (1440p165) / LG C1 55"
Mobil: Moto G200

Permalänk
Medlem
Skrivet av Thomas:

Det säger inget om användaren.
Kör du crontab -e som root (eller med sudo) är det som root, annars som din användare.

Isåfall användare

Visa signatur

CPU: Ryzen 5600xGPU: 1080 TI ROG Strix RAM:2x16GB G.skill Trident @ 3600MHz MoBo: Asus B550FPSU: Corsair SF750
En resa till Nordkorea
2 dagar i Tjernobyl

Permalänk
Medlem

Skulle gissa att det kan ha att göra med var/hur du har installerat speedtest-modulen.
Se även https://docs.python.org/3/using/cmdline.html#envvar-PYTHONPAT...

Permalänk
Medlem

Själv har jag helt slutat använda cron(tab). Jag brukar samla allt som ska startas i systemd
https://wiki.archlinux.org/title/Systemd/Timers#Monotonic_tim...
Anledningen är kontroll, felsökning och att allt är samlat på samma plats.

Permalänk
Medlem
Skrivet av TANDEMCYKELN:

Kom på en sak till. Tänkte inte på det först. Jag börjar mitt skript med följande. Känns konstigt att inte ha det högst upp i sina pythonskript.

#!/usr/bin/python3

Det beror på hur man kör scriptet, ska du köra med +x och exekvera direkt krävs den raden längst upp. Ska du köra som TS genom att skicka scriptets sökväg som ett argument till Python behövs det inte.

Permalänk
Medlem

Saknas det inte en punkt med mellanrum innan strängen, tror inte du laddar skalet " . /usr/bin..........."
https://unix.stackexchange.com/questions/114300/whats-the-mea...

Visa signatur

Ei bor i stockholm och tar inget ansvar för allt som han säger
7900, 64 gig ram, radeon r290
Solna arbetscenter

Permalänk
Medlem
Skrivet av Ei:

Saknas det inte en punkt med mellanrum innan strängen, tror inte du laddar skalet " . /usr/bin..........."
https://unix.stackexchange.com/questions/114300/whats-the-mea...

Punkten som refereras till är en short-hand för source. Har inget med detta att göra

Permalänk
Medlem
Skrivet av Pelegrino:

Hej,
försöker logga hastigheten av bredbandet hemma så tänkte köra ett simpelt python-script. Scriptet fungerar och loggar korrekt när det körs ensamt men cron-jobbet verkar ej fungera då det ej kommer någon log.

cron:

0 */6 * * * /usr/bin/python3 /home/{user}/speedlog.py

speedlog:

import os.path import speedtest if not(os.path.exists("log.txt")): f = open("log.txt", "w") f.write("Timestamp\t Download\t Upload\t") else: f = open("log.txt","a") servers = [] threads = None s = speedtest.Speedtest() s.get_servers(servers) s.get_best_server() s.get_best_server() s.download(threads=threads) s.upload(threads=threads) s.results.share() res = s.results.dict() download = round(res['download']/10**6) upload = round(res['upload']/10**6) timestamp = res['timestamp'] ping = res['ping'] f.write("\n" + str(timestamp) + "\t" + str(download) + "\t" + str(upload))

Nu är jag rätt rostig på Python, men rent okulärt är inte f deklarerad utanför if-satsen...

with open(... ) as f: ... f.write(...)

är väl mer pythonic?
Dessutom behöver du inte kontrollera om filen finns, skriv bara över den med w.. right?

Permalänk
Medlem
Skrivet av DNW:

Skulle gissa att det kan ha att göra med var/hur du har installerat speedtest-modulen.
Se även https://docs.python.org/3/using/cmdline.html#envvar-PYTHONPAT...

Jadu, bra fråga. Körde bara pip.

Skrivet av andelf:

Nu är jag rätt rostig på Python, men rent okulärt är inte f deklarerad utanför if-satsen...

with open(... ) as f: ... f.write(...)

är väl mer pythonic?
Dessutom behöver du inte kontrollera om filen finns, skriv bara över den med w.. right?

Om filen ej finns vill jag lägga till rubriken i den. Annars räknar jag med att rubriken finns. W skriver dessutom över filen, jag vill appenda, därav används det inte mer än vid första körningen.

Visa signatur

CPU: Ryzen 5600xGPU: 1080 TI ROG Strix RAM:2x16GB G.skill Trident @ 3600MHz MoBo: Asus B550FPSU: Corsair SF750
En resa till Nordkorea
2 dagar i Tjernobyl

Permalänk
Medlem
Skrivet av Pelegrino:

Jadu, bra fråga. Körde bara pip.
Om filen ej finns vill jag lägga till rubriken i den. Annars räknar jag med att rubriken finns. W skriver dessutom över filen, jag vill appenda, därav används det inte mer än vid första körningen.

ah, missade den delen

write_header = os.path.isfile("log.txt") with open("log.txt", "a") as f: if write_header: f.write(...) . . f.write(..)

Permalänk
Medlem

Släng på en ">> /tmp/cron.log 2>&1" och kolla vad den trycker ur sig.
Antaligen så är det något som den inte hittar bara för att den är Cron.

Visa signatur

Ei bor i stockholm och tar inget ansvar för allt som han säger
7900, 64 gig ram, radeon r290
Solna arbetscenter

Permalänk

Vad säger:

sudo systemctl status cron

grep CRON /var/log/syslog