Toon posts:

Crontab ontrafelen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo iedereen,

Het is vast erg simpel maar ik snap een deel van de volgende cronjob niet:

Bash: yesterday.sh
1
2
3
4
0 4 * * * /bin/cat /var/log/asterisk/cdr-csv/Master.csv |/bin/grep 
ANSWERED |/bin/grep from-sip|/bin/grep 
`/var/log/asterisk/cdr-csv/yesterday` > 
/var/www/cdr/`/var/log/asterisk/cdr-csv/yesterday`.csv


Tot hier ben ik mee: Alle lijnen van het bastand 'Master.csv' die zowel 'ANSWERED' als 'from-sip' bevatten worden doorgegeven aan het script genaamd yesterday. Wat ik hier al niet helemaal begrijp is waarom de inhoud niet doorgegeven wordt met een '>' maar met een 'grep' commando (zie onderstaand fragmentje)

Bash: yesterday.sh
1
|/bin/grep `/var/log/asterisk/cdr-csv/yesterday` > 


Uiteindelijk komt de output terecht in een bestand dat yesterday.csv noemt. Wat ik hier dan weer niet goed bregrijp is deze regel:

Bash: yesterday.sh
1
/var/www/cdr/`/var/log/asterisk/cdr-csv/yesterday`.csv


Waarom staat hier 2x een pad dat begint met /var/www en waarom staat het 2de gedeelde tussen quotes.


Sorry voor de misschien domme vraag => Linux nOOb O+

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 19:19

Janoz

Moderator Devschuur®

!litemod

Sowieso is het geen programmeer vraag, maar een linux vraag. Ik zal je topic even verplaatsen, maar let hier in het vervolg wel even zelf op.

De oplossing is trouwens dat de backtick ( ` ) betekend dat daar de uitvoer van hetgeen er tussen staat komt. Zeer waarschijnlijk is yesterday een scriptje dat de datum van gisteren maakt. De laatste grep filtert dus op de datum van gisteren. Vervolgens wordt alles weggeschreven in een bestandje dat weer als naam de datum van gisteren heeft.

Leuk testje is om even
code:
1
echo `/var/log/asterisk/cdr-csv/yesterday`

te doen

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 22-01 08:08

TrailBlazer

Karnemelk FTW

die quotes zijn backticks en voeren dat programma uit. De output van dat programmatje wordt dan voor de .csv gezet. Wat krijg je als output als je dit commando uitvoert of doe eerst een cat /var/log/asterisk/cdr-csv/yesterday en kijk wat er in staat. Ik heb namelijk niet het idee dat het heel erg ingewikkeld is.
Overigens is het nogal ranzig IMHO en ik zou liever een script schijven wat ik in een keer aan kan roepen. Bij voorkeur dan in perl omdat dit bijzonder geschikt is voor dit soort dingen.
code:
1
bin/cat /var/log/asterisk/cdr-csv/Master.csv |/bin/grep ANSWERED

Verder is dit een standaard fout gebruik van grep/cat. Je kan gewoon doen
code:
1
/bin/grep ANSWERED /var/log/asterisk/cdr-csv/Master.csv

Zelfde output met een commando minder.

Edit damn you Janoz hele mooie reply getikt kom jij er eerst ff langs.

[ Voor 4% gewijzigd door TrailBlazer op 24-05-2007 11:32 ]


Verwijderd

Topicstarter
Bedankt voor jullie antwoorden en mijn excuses voor het fout plaatsen van dit topic.

Ik snap nu helemaal wat deze cron doet. Het script dat aangeroepen wordt is trouwens een simpel bash script dat enkel de entries bewaard met de datum van de vorige dag (en dit op de server bewaard).

En idd:-) ik ben toevallig bezig met dit in perl te herschrijven.

Nogmaals mijn dank om me op weg te helpen!

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 22-01 08:08

TrailBlazer

Karnemelk FTW

Verwijderd schreef op donderdag 24 mei 2007 @ 11:47:
Bedankt voor jullie antwoorden en mijn excuses voor het fout plaatsen van dit topic.

Ik snap nu helemaal wat deze cron doet. Het script dat aangeroepen wordt is trouwens een simpel bash script dat enkel de entries bewaard met de datum van de vorige dag (en dit op de server bewaard).

En idd:-) ik ben toevallig bezig met dit in perl te herschrijven.

Nogmaals mijn dank om me op weg te helpen!
code:
1
2
3
4
5
6
7
8
#!/usr/bin/perl
$day=zoek dat zelf maar uit
$filename=$day . ".csv";
open (OUTFILE,>$filename) || die "unable to open file\n";
while (<>) {
print OUTFILE if (/.*OUTFILE.*from-sip.*$day);
}
close OUTFILE;