[linux] cron job voor find

Pagina: 1
Acties:

  • BasXcore
  • Registratie: April 2002
  • Laatst online: 17-11-2025
Ik wil een cronjob maken die automatisch me mp3 bestanden indexeerd naar een playlist.lst Ik heb het volgende gemaakt, en dit werkt goed als je hem zelf uitvoert.

code:
1
2
#/bin/bash
find /var/mp3 -type f -name "*.mp3" > /var/shoutcast/dsp/playlist.lst \


Nu wil ik dit door een cronjob iedere minuut laten lopen. Ik sla het commando op in een bestand, en maak uit executable. Als ik dit dan door een cron laat draaien dan krijg ik de volgende melding terug:

find: paths must precede expression
Usage: find [path...] [expression]
/var/mp3/index_mp3: line 3:
: command not found


Ik heb zelf het idee dat hij de regel niet als 1 regel ziet. Terwijl ik er wel een "\" achter plaats.

Doe ik het helemaal fout ?

[ Voor 3% gewijzigd door BasXcore op 29-12-2003 16:16 ]


  • TD-er
  • Registratie: Januari 2000
  • Laatst online: 16-02 22:16
is het niet veel makkelijker (en sneller) om daar locate voor te gebruiken, of wil je dat een nieuwe file die je plaatst meteen in de playlist verschijnt?

Een goedkope voeding is als een lot in de loterij, je maakt kans op een paar tientjes korting, maar meestal betaal je de hoofdprijs. mijn posts (nodig wegens nieuwe layout)


  • JeroenT
  • Registratie: Juli 2001
  • Laatst online: 22-02 16:35

JeroenT

hoi!

Je moet het volledige pad naar "find" (/usr/local/bin/find) in je script zetten.. dus ff een whereis find doen ;)

[ Voor 16% gewijzigd door JeroenT op 29-12-2003 16:24 ]


  • BasXcore
  • Registratie: April 2002
  • Laatst online: 17-11-2025
Dit is een begin van een script wat ik wil gaan maken voor Shoutcast. Shoutcast DNAS kijkt naar zo'n playlist file, en ik kan die een commando geven om het opnieuw te initializeren. Dus als ik er mp3's bijplaats, of iemand anders, moet het meteen worden opgepikt. En daarmee wordt het playlist bestandje dus iederekeer mee overschreven.

Maar qua syntax is alles goed, maar niet hoe ik het uitvoer denk ik...

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 12:48
Ik zie die index_mp3 nergens in je script. Weet je wel zeker dat je je gehele script hier hebt geplaatst?

  • igmar
  • Registratie: April 2000
  • Laatst online: 31-01 23:50

igmar

ISO20022

Ja :). Lees man 5 crontab, en zoek daar het correcte formaat uit dat je aan crontab moet voeren. In dat bestand staat de tijd wanneer het uitgevoerd moet worden, en welk command.

  • BasXcore
  • Registratie: April 2002
  • Laatst online: 17-11-2025
Ik zie dat er in me script 3 "enters" stonden onder het script waardoor er meer fouten in stonden. Die zijn nu weg, me script ziet er nu als volgt uit :

code:
1
2
#/bin/bash
/bin/find /var/mp3 -type f -name "*.mp3" > /var/shoutcast/dsp/playlist.lst \


En als ik dus de find regel zelf uitvoer vanuit de console dan gaat het goed.

De code hierboven staat in een bestand genaamt "index_mp3" en die is executeble gemaakt.

Als ik die executable uitvoer met ./index_mp3 dan krijg ik de volgende melding :

# ./index_mp3
/bin/find: paths must precede expression
Usage: /bin/find [path...] [expression]
#
#
#

Begrijp er niets van...

[ Voor 4% gewijzigd door BasXcore op 29-12-2003 16:36 ]


Verwijderd

De shebang regel is fout.

#!/bin/bash

  • igmar
  • Registratie: April 2000
  • Laatst online: 31-01 23:50

igmar

ISO20022

BasXcore schreef op 29 december 2003 @ 16:36:
code:
1
2
#/bin/bash
/bin/find /var/mp3 -type f -name "*.mp3" > /var/shoutcast/dsp/playlist.lst \
Afgezien van de correcte opmerking van Cheatah, waar zet je dit neer ? Dit kun je niet rechtstreeks aan crontab voeren, en je zal dan entries in /etc/crontab aan moeten maken (die er vaak al zijn voor een aantal standaard systeem crontabs)

  • moto-moi
  • Registratie: Juli 2001
  • Laatst online: 09-06-2011

moto-moi

Ja, ik haat jou ook :w

igmar schreef op 29 december 2003 @ 16:42:
Afgezien van de correcte opmerking van Cheatah, waar zet je dit neer ? Dit kun je niet rechtstreeks aan crontab voeren, en je zal dan entries in /etc/crontab aan moeten maken (die er vaak al zijn voor een aantal standaard systeem crontabs)
crontab -e lijkt me een leuke optie ? ;)

Zou heb ik er bijvoorbeeld staan:
code:
1
0 12 * * * date >> /home/hylke/Procmail/sa-learn.log; /usr/bin/sa-learn --spam --mbox /home/hylke/evolution/local/learn-it/mbox >> /home/hylke/Procmail/sa-learn.log


Lange regels rulen :+

God, root, what is difference? | Talga Vassternich | IBM zuigt


  • BasXcore
  • Registratie: April 2002
  • Laatst online: 17-11-2025
Verwijderd schreef op 29 december 2003 @ 16:38:
De shebang regel is fout.

#!/bin/bash
Als ik dit verander dan krijg ik de volgende fout als ik het "script" uitvoer :

/bin/sh: /var/mp3/index_mp3: /bin/bash
: bad interpreter: No such file or directory

Verwijderd

BasXcore schreef op 29 december 2003 @ 16:48:
[...]


Als ik dit verander dan krijg ik de volgende fout als ik het "script" uitvoer :

/bin/sh: /var/mp3/index_mp3: /bin/bash
: bad interpreter: No such file or directory
dan bestaat /bin/bash niet lijkt me zo :D

  • BasXcore
  • Registratie: April 2002
  • Laatst online: 17-11-2025
Verwijderd schreef op 29 december 2003 @ 16:50:
[...]

dan bestaat /bin/bash niet lijkt me zo :D
hehe... nee, inderdaad. Er staat wel bash2 . Maar als ik dit dan weer aanpas in het script dan krijg ik de zelfde "bad interpreter" fout.

Misschien moet ik ff opnieuw beginnen anders. 8)7 (Dit is de eerste keer dat ik met scripts binnen Linux in aanraking kom. Wel veel ervaring in gwbasic/batch/pascal ...)

Wie heeft er een script voor me die het bovenstaande voor me uitvoert. Indexeerd alle mp3 bestanden, en dumpt dit in een playlist.lst ...

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 12:48
Doe eens gewoon op de command line "which bash" (natuurlijk zonder de ")

  • Wirf
  • Registratie: April 2000
  • Laatst online: 21-02 09:20
Dit zou ik gebruiken:
code:
1
2
#!/bin/sh
/bin/find /var/mp3 -type f -iname '*.MP3' > /var/shoutcast/dsp/playlist.lst


- de standaard shell in de #! regel (/bin/sh dus)
- enkele quotes ipv dubbele quotes om *.mp3 zorgt ervoor dat de shell met zn poten van die * afblijft (anders gaat ie het vervangen door "Britney spears.mp3 Christina Aguillera.mp3" etc. alle mp3's in die directory dus) de hier gebruikte bestandsnamen zijn alleen voorbeelden natuurlijk ;)
- iname gebruiken zodat zowel bla.MP3 als bla.mp3 meegenomen worden.

Heeft sinds kort zijn wachtwoord weer terug gevonden!


  • BasXcore
  • Registratie: April 2002
  • Laatst online: 17-11-2025
ge-flopt schreef op 29 december 2003 @ 17:02:
Doe eens gewoon op de command line "which bash" (natuurlijk zonder de ")
Geeft "/bin/bash" dus wel.

  • BasXcore
  • Registratie: April 2002
  • Laatst online: 17-11-2025
Wirf schreef op 29 december 2003 @ 17:09:
Dit zou ik gebruiken:
code:
1
2
#!/bin/sh
/bin/find /var/mp3 -type f -iname '*.MP3' > /var/shoutcast/dsp/playlist.lst


- de standaard shell in de #! regel (/bin/sh dus)
- enkele quotes ipv dubbele quotes om *.mp3 zorgt ervoor dat de shell met zn poten van die * afblijft (anders gaat ie het vervangen door "Britney spears.mp3 Christina Aguillera.mp3" etc. alle mp3's in die directory dus) de hier gebruikte bestandsnamen zijn alleen voorbeelden natuurlijk ;)
- iname gebruiken zodat zowel bla.MP3 als bla.mp3 meegenomen worden.
Dank je wel..! Dit alles heb ik opgeslagen (als "index_mp3") en executable gemaakt. Echter als ik dit uitvoer met ./index_mp3 dan krijg ik dus nog vreemd genoeg de volgende melding : ":bad interpreter: No such file or directory"

Which sh geeft : /bin/sh

  • Wirf
  • Registratie: April 2000
  • Laatst online: 21-02 09:20
BasXcore schreef op 29 december 2003 @ 17:20:
[...]
Dank je wel..! Dit alles heb ik opgeslagen (als "index_mp3") en executable gemaakt. Echter als ik dit uitvoer met ./index_mp3 dan krijg ik dus nog vreemd genoeg de volgende melding : ":bad interpreter: No such file or directory"

Which sh geeft : /bin/sh
:? uuhhh...

-de #! regel moet op de eerste regel staan, er mogen ook geen tekens voor staan (ook geen spaties ofzo)
-misschien is /bin/sh een link die stuk is, kijk eens met ls -l /bin/sh waar die (eventuele) link heenwijst en of dat bestand wel bestaat.

Heeft sinds kort zijn wachtwoord weer terug gevonden!


  • BasXcore
  • Registratie: April 2002
  • Laatst online: 17-11-2025
Wirf schreef op 29 december 2003 @ 17:24:
[...]


:? uuhhh...

-de #! regel moet op de eerste regel staan, er mogen ook geen tekens voor staan (ook geen spaties ofzo)
-misschien is /bin/sh een link die stuk is, kijk eens met ls -l /bin/sh waar die (eventuele) link heenwijst en of dat bestand wel bestaat.
Via vim zie ik echt geen spatie's of wat dan ook extra staan. Ik heb het volgende uitgevoerd met als uitslag :

# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Dec 27 17:28 /bin/sh -> bash*
#
#
#

  • Wirf
  • Registratie: April 2000
  • Laatst online: 21-02 09:20
hmm.. nou, anders laat je toch die hele #! regel weg? dat had je in het begin ook (je had hem uitgecommentarieerd met een #) en toen deed ie het wel "goed" (hij voerde find uit)

het is misschien niet zo heel netjes, maar als het werkt, wat zal jou het dan ook schelen? ;)

Heeft sinds kort zijn wachtwoord weer terug gevonden!


  • BasXcore
  • Registratie: April 2002
  • Laatst online: 17-11-2025
Sorry, ik heb het probleem, er zaten nog DOS line feeds in. Die heb ik verwidjerd en het werkt nu strakkie's !

Ontzettend bedankt !

  • igmar
  • Registratie: April 2000
  • Laatst online: 31-01 23:50

igmar

ISO20022

moto-moi schreef op 29 december 2003 @ 16:48:
crontab -e lijkt me een leuke optie ? ;)
Helemaal, maar als je daar een standaard shell-scriptje aan voert vind ie dat niet zo leuk ;)
Zou heb ik er bijvoorbeeld staan:
code:
1
<snip layout-verkrachter :-)>


Lange regels rulen :+
Ik heb ze ook, maar ik heb crontab vaker rare meldingen zien geven als je d'r wat raars aan voert. Nu waren het de DOS line-endings, maar het ging om de gedachte :)
Pagina: 1