Sida 1 av 1

crontab och mencoder

Postat: 21 maj 2009, 21:31
av reinfallt
Jag tänker börja använda crontab för att schemalägga tv-inspelningar med mencoder. Jag har provat att lägga till följande rad i min crontab:

Kod: Markera allt

0 21 21 5 * mencoder -tv driver=v4l2:device=/dev/video0:outfmt=yuy2:width=640:height=480:fps=25:channel=E6:adevice=/dev/dsp1:amode=1:audiorate=48000 -o "/home/reinfallt/Recording/test7.avi" -oac pcm -ovc xvid -xvidencopts bitrate=2000 -endpos 00:10:00 -ffourcc xvid tv://
I exemplet ovan testar jag att spela in 10 min kl 21 men den verkar bara spela in ca en halv sekund och sedan dör. Problemet måste ha med crontab att göra för när jag provar att köra mencoder-kommandot manuellt i en terminal fungerar det klockrent.

Re: crontab och mencoder

Postat: 21 maj 2009, 21:42
av janne-5011
skulle provat med:

00 21 21 5 * root mencoder -tv driver=v osv

men nu kan jag vara ute och cykla...

sen om du vill köra tex en halvtimme

Kod: Markera allt

30 21 21 5 * root killall mencoder
edit: la till en nolla i minutfältet

Re: crontab och mencoder

Postat: 22 maj 2009, 16:23
av reinfallt
skulle provat med:

00 21 21 5 * root mencoder -tv driver=v osv

men nu kan jag vara ute och cykla...

sen om du vill köra tex en halvtimme

Code: Select all
30 21 21 5 * root killall mencoder



edit: la till en nolla i minutfältet
Jag har aldrig riktigt varit överens med crontab. Jag har bara provat att använda det en gång förut med liknande problem. Då hade jag ett script som hämtade tv-tablå-information i xml-tv-format. Det fungerade när jag körde det manuellt men när crontab körde det fick jag bara en tom xml-fil.

Jag har inte provat ditt tips men jag vet inte vad det skulle göra för skillnad. Vad innebär det att lägga till "root" före kommandot?

Re: crontab och mencoder

Postat: 22 maj 2009, 17:31
av janne-5011
ska ju vara så här

Kod: Markera allt

minut timme dag månad veckodag användare
du hade mencoder som användare och funderade där på om mencoder har rättigheter etc så det funkar.
root har det ju.root är ungefär som windows admin.får skriva vart som helst, köra vad som helst osv.

sen hade du skrivit minut med 0 istället för 00.

brukar vara noga med hur man skriver crontabraden
vet inte hur du kör men jag brukar använda crontab som finns i /etc/crontab

starta om med

Kod: Markera allt

/etc/init.d/cron restart
finns andra sätt också men dom har jag aldrig fått att funka

crontab uppdaterar sig inte själv.
men det kanske du redan visste.

du får väl testa och se :)

Re: crontab och mencoder

Postat: 22 maj 2009, 18:00
av reinfallt
minut timme dag månad veckodag användare
Jaså? Alla guider jag sett har bara

Kod: Markera allt

minut timme dag månad veckodag
Men jag provade att lägga till "root" före kommandot i alla fall och då skapades inte ens en avi-fil. Som jag sa tidigare så spelas faktiskt några bildrutor in och det skapas en avi-fil på ca 300 kb.

Jag provade även att enabla loggningen för cron men den rapporterar inte att något har gått fel i alla fall. I loggen står bara att kommandot kördes den angivna tiden och inget mer.

Re: crontab och mencoder

Postat: 22 maj 2009, 18:09
av reinfallt
ok nu är jag med. i /etc/crontab används även användarnamn. Hittills har jag bara ändrat min egen crontab med

Kod: Markera allt

crontab -e
Jag ska testa om det fungerar bättre att använda /etc/crontab

Re: crontab och mencoder

Postat: 23 maj 2009, 10:44
av David Andersson
Cronjobb kör by default med begränsad PATH. Om det är problemet så borde den inte ha kunnat starta mencoder och det borde inte ens ha blivit en halv sekund.

Får jag föreslå att du skapar ett script "tvinspeljobb" i mappen ~/bin. Det skulle kunna se ut så här

Kod: Markera allt

#!/bin/sh
# Record tv from cron job
# Usage: tvinspeljobb CHANNEL DURATION DESTINATION
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

mencoder -tv driver=v4l2:device=/dev/video0:outfmt=yuy2:width=640:height=480:fps=25:channel="$1":adevice=/dev/dsp1:amode=1:audiorate=48000 -o "$3" -oac pcm -ovc xvid -xvidencopts bitrate=2000 -endpos "$2" -ffourcc xvid tv://
Och i crontab -e (som vanlig användare)

Kod: Markera allt

0 21 21 5 * /home/reinfallt/bin/tvinspeljobb E6 00:10:00 /home/reinfallt/Recording/test7.avi >>/tmp/tvinspeljobb.log
Kolla /tmp/tvinspeljobb.log vad som hänt om det inte funkar.

(ej testat)

Re: crontab och mencoder

Postat: 23 maj 2009, 11:41
av reinfallt
David Andersson skrev:Cronjobb kör by default med begränsad PATH. Om det är problemet så borde den inte ha kunnat starta mencoder och det borde inte ens ha blivit en halv sekund.

Får jag föreslå att du skapar ett script "tvinspeljobb" i mappen ~/bin. Det skulle kunna se ut så här

Kod: Markera allt

#!/bin/sh
# Record tv from cron job
# Usage: tvinspeljobb CHANNEL DURATION DESTINATION
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

mencoder -tv driver=v4l2:device=/dev/video0:outfmt=yuy2:width=640:height=480:fps=25:channel="$1":adevice=/dev/dsp1:amode=1:audiorate=48000 -o "$3" -oac pcm -ovc xvid -xvidencopts bitrate=2000 -endpos "$2" -ffourcc xvid tv://
Och i crontab -e (som vanlig användare)

Kod: Markera allt

0 21 21 5 * /home/reinfallt/bin/tvinspeljobb E6 00:10:00 /home/reinfallt/Recording/test7.avi >>/tmp/tvinspeljobb.log
Kolla /tmp/tvinspeljobb.log vad som hänt om det inte funkar.

(ej testat)
Fortfarande samma fel och /tmp/tvinspeljobb.log blev helt tom. Jag redirectade med &> istället för >> för att få med både stdout och stderr.

Re: crontab och mencoder

Postat: 23 maj 2009, 15:03
av reinfallt
Seriöst! Nu fungerade det helt plötsligt och den spelade in prick 10 min. Raden som fungerade ser ut på följande vis:

Kod: Markera allt

35 13 23 5 * /home/reinfallt/bin/tvinspeljobb.sh E6 00:10:00 /home/reinfallt/Recordings/test14.avi > /tmp/tvinspeljobb.log 2>&1
Nu ska jag formulera en vild teori om varför detta fungerade. Det är ju så att mencoder vanligtvis skriver en massa status-information till terminalfönstret medan den spelar in. Är det så att om inte den kan göra av denna output någon stans så fylls någon buffer snabbt och det är därför processen dör? När den körs som ett cronjob har den ju inget terminalfönster att skriva till, men när jag väljer att skicka både stdout och stderr till en loggfil så har den helt plötsligt någon stans att göra av all information och processen kan köra i lugn och ro. Jag förutsatte att informationen försvann i "tomma intet" om det inte fanns någon stans att göra av den men så kanske det inte är?

Någon får gärna slå hål på min teori för det är bara rena spekulationer. Det som tyder på att min teori stämmer är att om jag kör som jag gjorde från början så dör processen omedelbart. Redirectar jag stdout till en loggfil kan den köra i ca en halv minut. Redirectar jag både stdout och stderr till loggfilen kör den så länge som den ska göra.