|
| Script - action ved ændring af lastlog Fra : Morten Breum Mikkels~ |
Dato : 01-02-01 01:09 |
|
Hej igen,
Nu hvor jeg har cvs til at køre, skal jeg automatisk have tjekket
seneste version ud i en offentlig tilgængelig mappe. Der er tale om et
samarbejde om en hjemmeside.
jeg har brug for et script, der i pseudo-kode siger
while true
"hvis bruger x eller y har været logget på siden sidst"
CVSKOMMANDO
Og jeg har fundet frem til følgende:
---------------------------------
#!/bin/sh
lastlogcommand=/usr/bin/lastlog
grepcommand=/bin/grep
cvscheckoutcommand=/blablablabla/
lastx=`$lastlogcommand | $grepcommand x`
lasty=`$lastlogcommand | $grepcommand y`
while(true)
do
nowx=`$lastlogcommand | $grepcommand x`
nowy=`$lastlogcommand | $grepcommand y`
if [ $nowx != $lastx ]; then
`$cvscheckoutcommand`
lastx=$nowx
elif [ $nowy != $lasty ]; then
`$cvscheckoutcommand`
lasty=$nowy
fi
sleep 30s
done
---------------------------------
Men jeg får noget brok over testen "==" - har også prøvet med "-ne"
Hvad skal jeg bruge til strengsamenligning (man bash hjalp mig ikke
lige) - eller er der en måde at få sidste-logon-tid
som et timestamp (man lastlog hjalp heller ikke)?
På forhånd tak,
--
Morten
I've found Jesus. He was behind the sofa the whole time.
| |
Klaus Alexander Seis~ (01-02-2001)
| Kommentar Fra : Klaus Alexander Seis~ |
Dato : 01-02-01 04:30 |
|
Morten B M skrev:
> `$cvscheckoutcommand`
> `$cvscheckoutcommand`
Jeg ville fjerne de der backticks.
// Klaus
--
><>°
| |
Morten Breum Mikkels~ (01-02-2001)
| Kommentar Fra : Morten Breum Mikkels~ |
Dato : 01-02-01 09:38 |
|
In article <g826rj.dde4.1u3.klaus@zigzag.adsl.dk>, "Klaus Alexander
Seistrup" <klaus@seistrup.dk> wrote:
> Morten B M skrev:
>
>> `$cvscheckoutcommand`
>> `$cvscheckoutcommand`
>
> Jeg ville fjerne de der backticks.
Det kan også være jeg vil det, men indtil videre kan jeg ikke få testen
til at køre..
--
/Morten
Who's gonna turn down a junior mint?
| |
Klaus Alexander Seis~ (01-02-2001)
| Kommentar Fra : Klaus Alexander Seis~ |
Dato : 01-02-01 10:30 |
|
Morten B M skrev:
>>> `$cvscheckoutcommand`
>>
>> Jeg ville fjerne de der backticks.
>
> Det kan også være jeg vil det, men indtil videre kan jeg ikke få
> testen til at køre..
Har du overvejet at outputtet fra `$cvscheckoutcommand` måske virker
forstyrrende på testen?
Har du osse overvejet at sætte testvariablene i gåseøjne i testen?
Altså
if [ "$nowx" != "$lastx" ]; then
// Klaus
--
><>°
| |
Morten Breum Mikkels~ (01-02-2001)
| Kommentar Fra : Morten Breum Mikkels~ |
Dato : 01-02-01 14:27 |
|
In article <g82n81.c0mv.a8q.klaus@zigzag.adsl.dk>, "Klaus Alexander
Seistrup" <klaus@seistrup.dk> wrote:
> Har du overvejet at outputtet fra `$cvscheckoutcommand` måske virker
> forstyrrende på testen?
Næh, hvordan det?
Indtil videre har jeg indsat
echo "Så er X ændret"
men...
Nårh, hvis nu cvs-kommandoen ændrer lastlog-entryen..
Øhm, det er meningen at det skal køre hele tiden, jeg går ud fra det
skal startes som "nohup scriptnavn" hvorefter jeg logger ud, og da det
kører lokalt, kan cvs bruge det lokale filsystem som CVSROOT.
> Har du osse overvejet at sætte testvariablene i gåseøjne i testen?
Nu har jeg - og det kører!
Jeg takker.
--
/Morten
Those are my principles. If you don't like them I have others.
| |
Klaus Alexander Seis~ (01-02-2001)
| Kommentar Fra : Klaus Alexander Seis~ |
Dato : 01-02-01 17:45 |
|
Morten B M skrev:
>> Har du overvejet at outputtet fra `$cvscheckoutcommand` måske
>> virker forstyrrende på testen?
>
> Næh, hvordan det?
Prøv
$ cvscheckoutcommand=cal
$ `$cvscheckoutcommand`
Hos mig bliver resultatet "bash: February: command not found".
Jeg tænkte på at afhængigt af hvad du har sat cvscheckoutcommand til,
kunne du måske få nogle mere exotiske fejlmeddelelser (og jeg fatter
stadig ikke hvorfor du vil have variablen i backticks).
// Klaus
--
><>°
| |
Morten Breum Mikkels~ (11-02-2001)
| Kommentar Fra : Morten Breum Mikkels~ |
Dato : 11-02-01 21:25 |
|
Scriptet kører efter hensigten nu (skulle jeg mene), så det er tid til
at bringe mit næste problem til gruppen:
Scriptet kører på en computer, der fra tid til anden bliver lukket ned.
Hvordan sikrer jeg mig, at det altid kører - også selvom jeg ikke har
været logget ind siden den blev startet op?
Jeg leger med tanken om at lave et script, der starter det egentlige
script, og køre dette som et cron-job.
Det skal bare lige sikres, at det det egentlige script kun startes en
enkelt gang, og det volder mig problemer.
Jeg har kigget på "pidof", men jeg har ikke helt styr på hvordan jeg
skal bruge den, hvis det er den, jeg skal bruge (har prøvet forskelligt
fra man-siden, uden held)
Hvad er der galt med mit ikke-virkende forslag:
---------------------------------------
#!/bin/sh
SCRIPTNAME="/home/mbreum/bin/cvsscript"
pidofcommand="/sbin/pidof $SCRIPTNAME"
if [ `$pidofcommand`!="" ]; then
echo "Kører allerede"
exit 0
else
echo "Kører ikke, bør startes"
exit 0
fi
-----------------------------------------
Symptomet er, at scriptet konsekvent påstås at køre.
(her er bagpingerne da ok, ikke?)
--
Morten Mikkelsen
Money can't buy happiness...
But it sure makes misery easier to live with.
| |
Klaus Alexander Seis~ (11-02-2001)
| Kommentar Fra : Klaus Alexander Seis~ |
Dato : 11-02-01 23:02 |
|
Morten Breum Mikkelsen skrev:
> #!/bin/sh
> SCRIPTNAME="/home/mbreum/bin/cvsscript"
> pidofcommand="/sbin/pidof $SCRIPTNAME"
>
> if [ `$pidofcommand`!="" ]; then
> echo "Kører allerede"
> exit 0
> else
> echo "Kører ikke, bør startes"
> exit 0
> fi
> -----------------------------------------
>
> Symptomet er, at scriptet konsekvent påstås at køre.
> (her er bagpingerne da ok, ikke?)
Nej. pidofcommand sættes til et tal af outputtet fra pidof, lad os
sige 513. Nu vil `513` betyde at shellen forsøger at eksekvere
programmet 513, og outputtet herfra sammenligner du så med "". Det
skal jo gå galt.
Skriv i stedet
if [ "$pidofcommand" != "" ]; then
så burde det fungere.
Hvis du eller ikke skal bruge variablen pidofcommand til noget, kan
du med fordel skrive
if [ "$(/sbin/pidof $SCRIPTNAME)" != "" ]; then
// Klaus
--
><>°
| |
Kent Friis (11-02-2001)
| Kommentar Fra : Kent Friis |
Dato : 11-02-01 23:05 |
|
Den Sun, 11 Feb 2001 22:01:33 GMT skrev Klaus Alexander Seistrup:
>Morten Breum Mikkelsen skrev:
>
>> #!/bin/sh
>> SCRIPTNAME="/home/mbreum/bin/cvsscript"
>> pidofcommand="/sbin/pidof $SCRIPTNAME"
>>
>> if [ `$pidofcommand`!="" ]; then
>> echo "Kører allerede"
>> exit 0
>> else
>> echo "Kører ikke, bør startes"
>> exit 0
>> fi
>> -----------------------------------------
>>
>> Symptomet er, at scriptet konsekvent påstås at køre.
>> (her er bagpingerne da ok, ikke?)
>
>Nej. pidofcommand sættes til et tal af outputtet fra pidof, lad os
>sige 513. Nu vil `513` betyde at shellen forsøger at eksekvere
>programmet 513, og outputtet herfra sammenligner du så med "". Det
>skal jo gå galt.
Nix, prøv lige at læse scriptet en gang til.
Mvh
Kent
--
http://www.celebrityshine.com/~kfr - sidste billede uploadet: moon.png
| |
Regnar Bang Lyngso (12-02-2001)
| Kommentar Fra : Regnar Bang Lyngso |
Dato : 12-02-01 05:23 |
|
In article <4yCh6.46820$zw.775492@twister.sunsite.dk>, "Morten Breum Mikkelsen" <newsread@mikkelsens.netx> writes:
MBM> if [ `$pidofcommand`!="" ]; then
Udskiftes med:
if [ "`$pidofcommand`" != "" ]; then
Knus
Regnar
| |
Morten Breum Mikkels~ (12-02-2001)
| Kommentar Fra : Morten Breum Mikkels~ |
Dato : 12-02-01 10:11 |
|
In article <yb6d7cocyy0.fsf@ariel.daimi.au.dk>, "Regnar Bang Lyngso"
<rblyngso@daimi.au.dk> wrote:
> if [ "`$pidofcommand`" != "" ]; then
Næh, jeg synes ikke det kører. Måske er det pidof, der er gal?
# /sbin/pidof httpd
506 510 508 [osv]
#/sbin/pidof bash
[tom linje]
# ps
PID TTY TIME CMD
727 pts/0 00:00:00 bash
[osv, så jeg burde have fået mindst 727 ud ovenfor, right?]
pidof giver også en tom linje, når jeg bruger navnet på mit script,
både som "sh scriptnavn", "sh /fuld/sti/scriptnavn", "scriptnavn" og
"/fuld/sti/scriptnavn" (om det kører eller ej).
Man-siden hjælper mig ikke...
Er der en mere sikker metode, eller er pidof alt hvad jeg har?
--
Morten Mikkelsen
One day as I came home early from work ... I saw a guy jogging naked.
I said to the guy: Hey buddy... What are you doing that for?
He said: Because you came home early!
| |
Klaus Alexander Seis~ (12-02-2001)
| Kommentar Fra : Klaus Alexander Seis~ |
Dato : 12-02-01 11:15 |
|
Morten Breum Mikkelsen skrev:
> Er der en mere sikker metode, eller er pidof alt hvad jeg har?
Hvad med at lade dit script lave et semafordir i /var/lock/LCK..scriptnavn,
eller hvor dit system nu gemmer den slags, og sætte en trap op der fjerner
semaforen igen ved exit - så kan du teste på det dir i stedet? Fx
#v+
#!/bin/sh
SEMAFORDIR="/var/lock/LCK..$(basename ${0}.d"
mkdir ${SEMAFORDIR} || {
echo "$(basename ${0} kører allerede" >&2
exit 1
}
trap "rm -rf ${SEMAFORDIR} >/dev/null 2>&1" 0 1 2 3 15
: Her kommer så resten af dit script
exit 0
# EOF
#v-
// Klaus
--
><>°
| |
Regnar Bang Lyngso (12-02-2001)
| Kommentar Fra : Regnar Bang Lyngso |
Dato : 12-02-01 11:17 |
|
In article <JMNh6.49886$zw.827391@twister.sunsite.dk>, "Morten Breum Mikkelsen" <newsread@mikkelsens.netx> writes:
>> if [ "`$pidofcommand`" != "" ]; then
MBM> Næh, jeg synes ikke det kører. Måske er det pidof, der er
MBM> gal? # /sbin/pidof httpd 506 510 508 [osv]
Skriver det stadig "Kører allerede"?
MBM> pidof giver også en tom linje, når jeg bruger navnet på mit
MBM> script, både som "sh scriptnavn", "sh /fuld/sti/scriptnavn",
MBM> "scriptnavn" og "/fuld/sti/scriptnavn" (om det kører eller
MBM> ej). Man-siden hjælper mig ikke...
Ifølge min man-side:
-x Scripts too - this causes the program to also
return process id's of shells running the named
scripts.
MBM> Er der en mere sikker metode, eller er pidof alt hvad jeg
MBM> har?
Aner det ikke.
Knus
Regnar
| |
|
|