hilpers


  hilpers > comp.os.* > comp.os.linux.overig

 #1  
15.10.2009, 18:17
Johan
Hallo,

Ik ben opzoek naar een programma dat een wachtrij voor het uitvoeren
van een rekenprogramma beheerd.

We hebben op het werk een stevige server waar verschillende mensen op
rekenen. Op deze server staat een rekenprogramma waarvoor wij 1
licentie hebben. Nu willen ongeveer 5 collega's dit programma
gebruiken. De sommen die gedaan worden duren tussen 1 uur en een paar
dagen. Nu gaat er best wat rekentijd verloren omdat de sommen vaak 's
nachts aflopen en we pas de volgende dag een nieuwe som kunnen starten.

Om dit te verhelpen ben ik op zoek naar een programma waar
verschillende gebruikers opdrachten in een wachtrij kunnen zetten en
die in dan achter elkaar uitgevoerd worden.

Helaas is atd niet echt bruikbaar. We weten niet hoelang een berekening
precies gaat duren. De batch optie werkt ook niet, er worden ook andere
berekeningen gedaan op de computer waardoor de load niet voldoende zakt
om een nieuwe som te starten.

Ik ben opzoek naar iets als atd/batch maar dat die dan start zodra de
vorige som klaar is ongeacht de load.

Met google kan ik niet echt iets vinden, waarschijnlijk de verkeerde
zoek woorden.

Alvast bedankt voor suggesties,

Groet,

Johan
 #2  
15.10.2009, 19:16
Edwin van den Oetelaar
Johan wrote:
[..]
> Met google kan ik niet echt iets vinden, waarschijnlijk de verkeerde
> zoek woorden.
>
> Alvast bedankt voor suggesties,
>
> Groet,
>
> Johan
>

Wil je sommige personen of sommen hogere prioriteit geven (boven in de lijst laten komen) of is
iedereen gelijk ?
Hoe roep je het programma aan ?
Moet je veel command line parameters meegeven of een filenaam ?
Kun je met ps | grep programmanaam zien of het al gestart is ?
Draait het onder iedere gebruiken zijn eigen UID/homedirectory of is een algemene map waar
input/output in komt?
Of ik snap de vraag niet of het antwoord is zo voor de handliggend dat je eroverheen kijkt denk ik.
Laat eens wat extra info weten svp.

Gr,
Edwin
 #3  
15.10.2009, 19:21
Fred Mobach
Johan wrote:

[..]
> verschillende gebruikers opdrachten in een wachtrij kunnen zetten en
> die in dan achter elkaar uitgevoerd worden.
>
> Helaas is atd niet echt bruikbaar. We weten niet hoelang een
> berekening precies gaat duren. De batch optie werkt ook niet, er
> worden ook andere berekeningen gedaan op de computer waardoor de load
> niet voldoende zakt om een nieuwe som te starten.
>
> Ik ben opzoek naar iets als atd/batch maar dat die dan start zodra de
> vorige som klaar is ongeacht de load.


Geen idee omtrent een pasklare oplossing, maar ik zou er zelf een ter
plekke bedenken :

1. de gebruikers voegen hun commando toe aan een bestand :
echo "commando" >> queue
2. een achtergrond proces leest deze commando's in volgorde en voert ze
uit :
while read COMMAND
do
$COMMAND &
done < <queue>

Misschien is een pipe beter, maar dat mag je zelf testen.
 #4  
15.10.2009, 19:33
Johan
On Thu, 15 Oct 2009 21:16:16 +0200
Edwin van den Oetelaar <newsgroups> wrote:

> Johan wrote:
>
> Wil je sommige personen of sommen hogere prioriteit geven (boven in
> de lijst laten komen) of is iedereen gelijk ?

Nee, gewoon op volgorde

> Hoe roep je het programma aan ?

Commandline opdracht, maar iedere som heeft andere opties op de
opdracht regel

> Moet je veel command line parameters meegeven of een filenaam ?

Filename en parameters

> Kun je met ps | grep programmanaam zien of het al gestart is ?

Ja, ook als die door andere gebruiker gestart is

> Draait het onder iedere gebruiken zijn eigen UID/homedirectory of is
> een algemene map waar input/output in komt?

Alle gebruikers hebben eigen UID/home directory.


> Of ik snap de vraag niet of het antwoord is zo voor de handliggend
> dat je eroverheen kijkt denk ik. Laat eens wat extra info weten svp.

Ik hoop dat het voor de handliggend is, maar ik zie zo snel geen
oplossing.
 #5  
15.10.2009, 19:37
Johan
On Thu, 15 Oct 2009 21:21:24 +0200
Fred Mobach <fred> wrote:

> Johan wrote:
>> Geen idee omtrent een pasklare oplossing, maar ik zou er zelf een ter

> plekke bedenken :
>
> 1. de gebruikers voegen hun commando toe aan een bestand :
> echo "commando" >> queue
> 2. een achtergrond proces leest deze commando's in volgorde en voert
> ze uit :
> while read COMMAND
> do
> $COMMAND &
> done < <queue>
>
> Misschien is een pipe beter, maar dat mag je zelf testen.


De gebruikers hebben geen schrijfrechten bij elkaar. Dezelfde wachtrij
moet door verschillende gebruikers gebruikt worden. Dan moet dit
achtergrond process de rechten hebben om elk nieuwe som als andere
gebruiker te starten. Ik denk niet dat ik dat veilig krijg.

Groet,

Johan
 #6  
15.10.2009, 19:56
Edwin van den Oetelaar
Johan wrote:
> On Thu, 15 Oct 2009 21:16:16 +0200
> Edwin van den Oetelaar <newsgroups> wrote:
>
> Nee, gewoon op volgorde
>
> Commandline opdracht, maar iedere som heeft andere opties op de
> opdracht regel
>
> Filename en parameters
>
> Ja, ook als die door andere gebruiker gestart is
>
> Alle gebruikers hebben eigen UID/home directory.
>> Ik hoop dat het voor de handliggend is, maar ik zie zo snel geen

> oplossing.
>


Het antwoord van Fred Mobach lijkt me best redelijk.
Je zet alle sommen onder elkaar in een lijstje en voert dit lijstje uit.
Een andere is dat je iedere gebruiker zijn eigen lijstje geeft en dan eerst kijkt of een ander
proces al loopt voordat je zelf iets opstart.
Het gebruik van een 'lockfile' zou ik aanbevelen.

batch file bij iedere gebruiker : runme.sh (chmod +x op doen ;-) )
-----------------
#!/bin/sh
# geen garanties, het werkt wel
# er is natuurlijk een race tussen de verschillende gebruikers
# er kan een commando gemist worden in theorie
while read COMMAND ; do

while [ -f /tmp/benbezig.lock ] ; do
sleep 10
done
echo "1" >/tmp/benbezig.lock
$COMMAND
rm /tmp/benbezig.lock
sleep 1
done < "mijnqueue.bat"
# lijst is op
--------------

en dan een lijstje met acties : mijnqueue.bat
----------------
cat /etc/hosts
date
echo "winterklaas was here"
----------------
Werkt bij mij prima
 #7  
15.10.2009, 19:59
user
Johan wrote:

>> Kun je met ps | grep programmanaam zien of het al gestart is ?

> Ja, ook als die door andere gebruiker gestart is
>


Misschien kun je dan iedere minuut kijken of er nog 1 draaiende is??

jobs plaats je in een dir, je verplaatst/delete ze als ze gedaan zijn ...


Op unix noemde dat vroeger batch systemen. Er waren ook commerciele
beschikbaar...
http://kb.iu.edu/data/aewo.html


met deze op googel ben je even aan het lezen..
batch unix linux load balancing


--
 #8  
16.10.2009, 03:59
Johan
On Thu, 15 Oct 2009 21:56:34 +0200
Edwin van den Oetelaar <newsgroups> wrote:

[..]
> # lijst is op
> --------------
>
> en dan een lijstje met acties : mijnqueue.bat
> ----------------
> cat /etc/hosts
> date
> echo "winterklaas was here"
> ----------------
> Werkt bij mij prima



Bedankt, ik had nog niet aan die loc-file gedacht. Helaas is het vrij
random welke gebruiker als eerst mag. Maar dit is waarschijnlijk wel
werkbaar.

Groet,

Johan
 #9  
16.10.2009, 04:01
Johan
On Thu, 15 Oct 2009 21:59:54 +0200
user <dag> wrote:

> Johan wrote:
>> Misschien kun je dan iedere minuut kijken of er nog 1 draaiende is??

>
> jobs plaats je in een dir, je verplaatst/delete ze als ze gedaan
> zijn ...
>> Op unix noemde dat vroeger batch systemen. Er waren ook commerciele

> beschikbaar...
> [..]
>> met deze op googel ben je even aan het lezen..

> batch unix linux load balancing
>atd/batch is niet bruikbaar. Er zitten meerdere cpu's in de machine en

er worden verschillende rekenenprogrammas gebruikt. Dus de load zegt
niets of het programma al draait, dus batch werkt niet. at ook niet
omdat we vooraf niet weten hoelang een berekening duur, zeker niet als
een berekening van een andere collega loopt.

Groet,

Johan
 #10  
16.10.2009, 06:57
Peter van Hooft
On 2009-10-15, Johan <johan> wrote:
> On Thu, 15 Oct 2009 21:21:24 +0200
> Fred Mobach <fred> wrote:
>> De gebruikers hebben geen schrijfrechten bij elkaar. Dezelfde wachtrij

> moet door verschillende gebruikers gebruikt worden. Dan moet dit
> achtergrond process de rechten hebben om elk nieuwe som als andere
> gebruiker te starten. Ik denk niet dat ik dat veilig krijg.
>
> Groet,
>
> Johan
>

Misschien een queueing systeem gebruiken? Het is wel overkill voor 1 machine en
het opzetten ervan is wel een klus, maar kijk eens naar torque
(http://www.clusterresources.com/products/torque/). Op fedora 11 kun je dit zo
installeren en het zal ook vast wel beschikbaar zijn voor andere distro's.
En als je meerdere servers hebt kun je die ook makkelijk hiervoor inzetten.

groet,

Peter
 #11  
16.10.2009, 08:27
Fred Mobach
Johan wrote:

> On Thu, 15 Oct 2009 21:21:24 +0200
> Fred Mobach <fred> wrote:
>> De gebruikers hebben geen schrijfrechten bij elkaar. Dezelfde wachtrij

> moet door verschillende gebruikers gebruikt worden. Dan moet dit
> achtergrond process de rechten hebben om elk nieuwe som als andere
> gebruiker te starten. Ik denk niet dat ik dat veilig krijg.


OK,
touch /tmp/queue
chattr +a /tmp/queue
chown nobody:nobody queue
chmod o+w /tmp/queue (blijft onveilig)
echo "<username> <command>" >> /tmp/queue

en in de while loop
su - <username> --command=<command> &
 #12  
16.10.2009, 09:15
houghi
Peter van Hooft wrote:
> Misschien een queueing systeem gebruiken? Het is wel overkill voor 1 machine en
> het opzetten ervan is wel een klus, maar kijk eens naar torque
> ([..]). Op fedora 11 kun je dit zo
> installeren en het zal ook vast wel beschikbaar zijn voor andere distro's.
> En als je meerdere servers hebt kun je die ook makkelijk hiervoor inzetten.


Zou het mogenlijk zijn om de commands die eigenlijk gedaan moeten worden
naar een bestand te schrijven. e.g.:
su - user1 -c programma -parameter xyz
su - user2 -c programma -parameter abz

#!/bin/bash
#scrip + parameters
PROGRAM=$@
USER=`whoami`
echo "su - $USER -c /bin/programma $PROGRAM" >> /var/spool/programma/runfile"

De user doet dan `script -parametere xyz` in plaats van vroeger
`programma -parameter xyz`

Daarna een script dat kijkt of er een regel in dat bestand staat. Indien
dat het geval is, dan runt het die regel en haalt die regel er uit.
Indien er niets in staat, dan doet het niets.

#!/bin/bash
FILE="/var/spool/programma/runfile"
SIZE=`stat -c %s $FILE`
if [ "$SIZE" -gt "0" ]
then
PROG=`head -n 1 $FILE`
$PROG
perl -pi -e '$_ = "" if ($. == 1);' $FILE
else
echo "Nothing to do"
fi


Die kun je dan in een crontab zetten en om bijvoorbeeld de 5 minuten
laten lopen. Verder zijn er een aantal mogenlijkheden dat de gebruiker
nog steeds het zelfde comando invoert.

Je zal vermoedenlijk wel nog de nodige test moeten doen.

Misschien heb je zelfs de mogenlijkheid om te berekenen hoe lang zaken
gaan duren en dat ook als feedback teruggeven naar de gebruiker.

houghi
 #13  
16.10.2009, 10:16
Martijn van Buul
Fred Mobach (fred) schreef:
> OK,
> touch /tmp/queue
> chattr +a /tmp/queue
> chown nobody:nobody queue
> chmod o+w /tmp/queue (blijft onveilig)
> echo "<username> <command>" >> /tmp/queue
>
> en in de while loop
> su - <username> --command=<command> &


echo "root rm -rf /" >> /tmp/queue
 #14  
16.10.2009, 11:24
Johan
On Fri, 16 Oct 2009 10:16:58 +0000 (UTC)
Martijn van Buul <pino> wrote:

> Fred Mobach (fred) schreef:
> > OK,
> > touch /tmp/queue
> > chattr +a /tmp/queue
> > chown nobody:nobody queue
> > chmod o+w /tmp/queue (blijft onveilig)
> > echo "<username> <command>" >> /tmp/queue
> >
> > en in de while loop
> > su - <username> --command=<command> &

>
> echo "root rm -rf /" >> /tmp/queue
>

Dat is dus het probleem wat ik heb met de script aanpak. De data op de
server is vertrouwelijk, dus moet de oplossing wel veilig zijn. Daarom
had ik gehoopt dat er een passend programma bestond.

Groet,

Johan
 #15  
16.10.2009, 11:36
richard lucassen
On Fri, 16 Oct 2009 13:24:24 +0200
Johan <johan> wrote:

> > > en in de while loop
> > > su - <username> --command=<command> &

> >
> > echo "root rm -rf /" >> /tmp/queue
> >

> Dat is dus het probleem wat ik heb met de script aanpak. De data op de
> server is vertrouwelijk, dus moet de oplossing wel veilig zijn. Daarom
> had ik gehoopt dat er een passend programma bestond.


Afvangen:

if [ `id -u` -eq 0 ] ; then
echo -e "\nDat gaan we mooi niet doen...\n"
exit 1
fi

Soortgelijke onderwerpen
Hoe zinvol is een CUPS wachtrij?

Hallo, Bij een klant heb ik veel problemen gehad met de snelheid van printen, of eigenlijk met de reaktietijd van OpenOffice op een printopdracht. Het gaat hier om Windows...

bestand staat in wachtrij

Hallo, Als ik een bestand op een DVD-RW wil kopieren dat staat dat blijkbaar in een soort wachtrij tot je een of ander commando geeft om de bestanden effectief te...

emule wachtrij

(excuses voor de Xpost, en het newbie-gehalte van de vraag). Ik heb een netwerkje thuis (ST570, met draadloos daaraan 2 PC's). Op 1 pc staat pas emule geinstalleerd, en de...

betanden in wachtrij voor cd

Ik krijg steeds een melding dat er bestanden in de wachtrij staan om op cd te branden. Ik wil helemaal niets meer branden. Hoe kan ik deze melding verwijderen. Wie weet raad?


Alle tijden zijn in GMT. De tijd is nu 12:14. | Privacy Policy