/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
[FreeBSD] Forstår ikke denne crontab
Fra : Joe Doe


Dato : 12-08-04 16:34

Jeg køre FreeBSD og har noget jeg skal have kørt fra crontab. Jeg har
følgende crontab indstilling:

*/1 * * * * /usr/home/data_import.sh

Dvs. at hvert minut, skal den starte "data_import.sh" op. Denne fil ser
således ud:

#!/usr/local/bin/bash
NUMPROC=`/bin/ps -axu | /usr/bin/grep -v grep | /usr/bin/grep -c
data_import.php`
if [ "$NUMPROC" -eq 0 ]
then
/usr/local/bin/php -c /root/php.ini /usr/home/data_import.php &
else
echo The data_import.php process is already running!
fi

Dvs. at hvis den IKKE kan finde en "data_import.php" process, så skal den
starte en ny. Hvis den kan finde en process, så skal den bare afslutte.

Mit problem er, at den altid starter en ny process, så jeg får flere éns
processer kørende samtidigt!? Hvorfor virker det ikke? Jeg har også forsøgt
med:

NUMPROC=`/bin/ps -axu | /usr/bin/grep -v grep | /usr/bin/grep
data_import.php`
if [ test -z "$NUMPROC" ]

Det eneste jeg er ude på er, at starte processen automatisk, hvis den ikke
allerede køre. En "ps -ax" viser dette, når processen køre OK:

41693 ?? S 0:00.11 /usr/local/bin/php -c /root/php.ini
/usr/home/data_import.php

Nogen bud?



 
 
FePe (12-08-2004)
Kommentar
Fra : FePe


Dato : 12-08-04 21:04

Joe Doe wrote:

> Jeg køre FreeBSD og har noget jeg skal have kørt fra crontab. Jeg har
> følgende crontab indstilling:
>
> */1 * * * * /usr/home/data_import.sh
>
> Dvs. at hvert minut, skal den starte "data_import.sh" op. Denne fil ser
> således ud:
>
> #!/usr/local/bin/bash
> NUMPROC=`/bin/ps -axu | /usr/bin/grep -v grep | /usr/bin/grep -c
> data_import.php`
> if [ "$NUMPROC" -eq 0 ]
> then
> /usr/local/bin/php -c /root/php.ini /usr/home/data_import.php &
> else
> echo The data_import.php process is already running!
> fi
>
> Dvs. at hvis den IKKE kan finde en "data_import.php" process, så skal den
> starte en ny. Hvis den kan finde en process, så skal den bare afslutte.
>
> Mit problem er, at den altid starter en ny process, så jeg får flere éns
> processer kørende samtidigt!? Hvorfor virker det ikke? Jeg har også forsøgt
> med:
>
> NUMPROC=`/bin/ps -axu | /usr/bin/grep -v grep | /usr/bin/grep
> data_import.php`
> if [ test -z "$NUMPROC" ]
>
> Det eneste jeg er ude på er, at starte processen automatisk, hvis den ikke
> allerede køre. En "ps -ax" viser dette, når processen køre OK:
>
> 41693 ?? S 0:00.11 /usr/local/bin/php -c /root/php.ini
> /usr/home/data_import.php
>
> Nogen bud?

Alt, du har gjort er rigtigt, undtagen den lille streg... Det skal være 'ps
axu' og ikke 'ps -axu'.

- FePe.



Joe Doe (12-08-2004)
Kommentar
Fra : Joe Doe


Dato : 12-08-04 21:17

> Alt, du har gjort er rigtigt, undtagen den lille streg... Det skal være
'ps
> axu' og ikke 'ps -axu'.

Mon dog... det ændre ikke noget og det viser også præcist det samme output.

Det skal siges, at når jeg køre min .sh fil manuelt (fra en bash shell), så
fungere alting helt perfekt og jeg kan ikke få den til at starte op flere
gange. Det er kun når det eksekveres fra crontab!?



Michael Rasmussen (12-08-2004)
Kommentar
Fra : Michael Rasmussen


Dato : 12-08-04 22:18

On Thu, 12 Aug 2004 17:33:53 +0200, Joe Doe wrote:

> if [ "$NUMPROC" -eq 0 ]
To bud:
1) $NUMPROC bliver ikke erstattet: prøv echo $NUMPROC
2) Normalt tester jeg om indhold af variabel på følgende måde: if [
"$NUMPROC" ]. Hvis $NUMPROC er null (ingen tildelt værdi) returneres; ja
du gætte rigtig: null ~= 0 ~= false.

--
Hilsen/Regards
Michael Rasmussen

Get my public GnuPG keys:
mir <at> datanom <dot> net
http://search.keyserver.net:11371/pks/lookup?op=get&search=0xE501F51C
mir <at> miras <dot> org
http://search.keyserver.net:11371/pks/lookup?op=get&search=0xE3E80917
--------------------------------------------------------------
April 1

This is the day upon which we are reminded of what we are on the other three
hundred and sixty-four.
      -- Mark Twain, "Pudd'nhead Wilson's Calendar"



Joe Doe (12-08-2004)
Kommentar
Fra : Joe Doe


Dato : 12-08-04 23:00

> To bud:
> 1) $NUMPROC bliver ikke erstattet: prøv echo $NUMPROC

Den skriver altid 0, når den køres fra cron (uanset om der ér en process
allerede) men hvis jeg køre den manuelt, viser den korrekt 1 (hvis der ér en
process - 0 hvis der ikke er).



Jacob Gaarde (12-08-2004)
Kommentar
Fra : Jacob Gaarde


Dato : 12-08-04 22:44

On Thu, 12 Aug 2004 17:33:53 +0200
"Joe Doe" <nowhere@invalid.xyz> wrote:

> Jeg køre FreeBSD og har noget jeg skal have kørt fra crontab. Jeg har
> følgende crontab indstilling:
>
> */1 * * * * /usr/home/data_import.sh
>
> Dvs. at hvert minut, skal den starte "data_import.sh" op. Denne fil
> ser således ud:
>
> #!/usr/local/bin/bash
> NUMPROC=`/bin/ps -axu | /usr/bin/grep -v grep | /usr/bin/grep -c
> data_import.php`
prøv at bytte om på de to grep statements (du filtrerer grep fra _før_
du bruger grep igen) eller:

NUMPROC=`/bin/ps -axu | /usr/bin/grep [d]ata_import.php | /usr/bin/wc
-l`

da din grep understøtter "-c" antager jeg, den også undgår at gribe sige
selv med "[d]ata_import.php" konstruktionen

> if [ "$NUMPROC" -eq 0 ]
> then
> /usr/local/bin/php -c /root/php.ini /usr/home/data_import.php &
> else
> echo The data_import.php process is already running!
> fi
>
> Dvs. at hvis den IKKE kan finde en "data_import.php" process, så skal
> den starte en ny. Hvis den kan finde en process, så skal den bare
> afslutte.
>
> Mit problem er, at den altid starter en ny process, så jeg får flere
> éns processer kørende samtidigt!? Hvorfor virker det ikke? Jeg har
> også forsøgt med:
>
> NUMPROC=`/bin/ps -axu | /usr/bin/grep -v grep | /usr/bin/grep
> data_import.php`
> if [ test -z "$NUMPROC" ]
>
> Det eneste jeg er ude på er, at starte processen automatisk, hvis den
> ikke allerede køre. En "ps -ax" viser dette, når processen køre OK:
>
> 41693 ?? S 0:00.11 /usr/local/bin/php -c /root/php.ini
> /usr/home/data_import.php
>
> Nogen bud?
>
>


--
//Jacob Gaarde
//Dont reply to my (aparent) e-mail address. Instead Use
//e-mail : gaarde <at> mailme <dot> dk

Joe Doe (12-08-2004)
Kommentar
Fra : Joe Doe


Dato : 12-08-04 23:06

> > #!/usr/local/bin/bash
> > NUMPROC=`/bin/ps -axu | /usr/bin/grep -v grep | /usr/bin/grep -c
> > data_import.php`

> prøv at bytte om på de to grep statements (du filtrerer grep fra _før_
> du bruger grep igen) eller:

Det har jeg haft prøvet - virkede ikke bedre.

> NUMPROC=`/bin/ps -axu | /usr/bin/grep [d]ata_import.php | /usr/bin/wc
> -l`

grep -c burde vel være lige så godt?

> da din grep understøtter "-c" antager jeg, den også undgår at gribe sige
> selv med "[d]ata_import.php" konstruktionen

Den forstår jeg ikke helt?



Mogens Kjaer (13-08-2004)
Kommentar
Fra : Mogens Kjaer


Dato : 13-08-04 07:17

Joe Doe wrote:
> Jeg køre FreeBSD og har noget jeg skal have kørt fra crontab. Jeg har
> følgende crontab indstilling:
>
> */1 * * * * /usr/home/data_import.sh
>
> Dvs. at hvert minut, skal den starte "data_import.sh" op. Denne fil ser
> således ud:
>
> #!/usr/local/bin/bash
> NUMPROC=`/bin/ps -axu | /usr/bin/grep -v grep | /usr/bin/grep -c
> data_import.php`

Prøv at tilføje en linie med:

/bin/ps -axu >/tmp/gulerod

og se hvad der står i den fil efter cronjobbet er kørt et
par gange.

Måske er problemet, hvor lange linier ps tror den må lave.
Hvis den trunkerer linierne, skærer den måske noget af
tekststrengen til højre, så data_import.php ikke kommer med.

Mogens
--
Mogens Kjaer, Carlsberg A/S, Computer Department
Gamle Carlsberg Vej 10, DK-2500 Valby, Denmark
Phone: +45 33 27 53 25, Fax: +45 33 27 47 08
Email: mk@crc.dk Homepage: http://www.crc.dk

Joe Doe (13-08-2004)
Kommentar
Fra : Joe Doe


Dato : 13-08-04 09:35

> Prøv at tilføje en linie med:
> /bin/ps -axu >/tmp/gulerod
>
> Måske er problemet, hvor lange linier ps tror den må lave.
> Hvis den trunkerer linierne, skærer den måske noget af
> tekststrengen til højre, så data_import.php ikke kommer med.

God idé og det var netop problemet. Det viste sig, at den kun tog 2/3 af
teksten med. Med kommandoen "ps -axw" lykkedes det, at få det til at
fungere. Min teori er, at crontab ikke har en "terminal emulering (???)" der
kan tage lige så mange kolonner som min bash shell via SSH - men kan man
opsætte det et eller andet sted?



Mogens Kjaer (13-08-2004)
Kommentar
Fra : Mogens Kjaer


Dato : 13-08-04 11:51

Joe Doe wrote:
....
> God idé og det var netop problemet. Det viste sig, at den kun tog 2/3 af
> teksten med. Med kommandoen "ps -axw" lykkedes det, at få det til at
> fungere. Min teori er, at crontab ikke har en "terminal emulering (???)" der
> kan tage lige så mange kolonner som min bash shell via SSH - men kan man
> opsætte det et eller andet sted?

Jeg syntes det er noget gris, at "enkommando >/tmp/gulerod" afhænger af
terminalens bredde.

Måske kan du sætte COLUMNS til noget stort, inden du kalder ps?

Mogens
--
Mogens Kjaer, Carlsberg A/S, Computer Department
Gamle Carlsberg Vej 10, DK-2500 Valby, Denmark
Phone: +45 33 27 53 25, Fax: +45 33 27 47 08
Email: mk@crc.dk Homepage: http://www.crc.dk

Joe Doe (13-08-2004)
Kommentar
Fra : Joe Doe


Dato : 13-08-04 12:18

> Jeg syntes det er noget gris, at "enkommando >/tmp/gulerod" afhænger af
> terminalens bredde.

Tjooo... det kan vi såmen godt blive enige om, men det er jo sådan cron
åbenbart fungere. Kan der være forskel på, at cron bruger en anden shell og
ikke bash som jeg bruger ved SSH?

> Måske kan du sætte COLUMNS til noget stort, inden du kalder ps?

Det fungere jo OK nu, så der er ingen grund til at gøre mere ved det.



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408528
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste