|
| [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.
| |
|
|