View previous topic :: View next topic |
Author |
Message |
pieter_parker Veteran
Joined: 07 Aug 2006 Posts: 1488 Location: 127.0.0.1
|
Posted: Wed Jun 13, 2007 12:40 pm Post subject: scriptgebastel - wenn verzeichnis .. dann 0.sh oder 1.sh |
|
|
hallo
da ist das verzeichnis /home/pieter/test/
es soll im 60 sekunden takt ueberprueft werden ob in dem verzeichnis /home/pieter/test/ eins der beiden unterverzeichnisse 0/ oder 1/ existiert
wenn 0/ existiert, soll das script /home/pieter/0.sh ausgefuehrt werden
wenn 1/ existiert, soll das script /home/pieter/1.sh ausgefuehrt werden
wenn beide verzeichnisse 0 und 1 existieren, soll /home/pieter/0.sh ausgefuehrt werden
wie koennte das funktionieren?
ich dachte es per cron zumachen
z.b. so
crontab -e -u pieter
* * * * * /home/pieter/01pruefen.sh
bei dem was in 01pruefen.sh soll tu ich mir schwer und weis kaum wie ich es angehen soll...
Code: |
#!/bin/sh
...
/home/pieter/0.sh
...
/home/pieter/1.sh
..
|
welches programm koennte ich nehmen um gucken zulassen ob eins der beiden verzeichnisse existiert? |
|
Back to top |
|
|
c_m Guru
Joined: 29 Jun 2005 Posts: 358
|
Posted: Wed Jun 13, 2007 12:47 pm Post subject: |
|
|
Code: | if [ -e /home ]; then echo 'Hallo Welt!'; fi |
Ich denke du wirst wiessen wie du das anpassen kannst?
//EDIT: ggf kannst du das auch direkt in die crontab schreiben wenns nicht zu lang wird.
//EDIT2: *SCNR*
Code: | #!/bin/sh
# hier liegt das PID-File
PIDFILE="/var/run/test.pid"
#Parameter >=1 ?
if [ $# -ge 1 ]
then
# wenn ja und parameter =="start"
if [ $1 == start ]
then
# prüfe ob schon eine instanz dieses Scriptes läuft
if [ -e $PIDFILE ]
then
echo "Already running!"
exit 1
fi
# tut sie nicht => PID im PID-File merken
echo $$ > $PIDFILE
# und die Prüfschleife starten
while [ true ]
do
#existiert das 0- Verzeichnis?
if [ -d /home/pieter/test/0 ]
then
# ja, also passendes Script starten
/home/pieter/0.sh
# nein, aber das 1-Verzeichnis vielleicht?
elif [ -d /home/pieter/test/1 ]
then
# ja, also passendes Script starten
/home/pieter/1.sh
fi
# warte 60 sec.
sleep 60;
done
# wenn ja und parameter =="stop"
elif [ $1 == "stop" ]
then
# läuft eine Instanz?
if [ -e $PIDFILE ]
then
# ja! Kille sie!
kill `cat $PIDFILE`
# und lösche das PID-File
rm $PIDFILE
# Wenn nicht, meldung ausgeben
else
echo "Not running!"
exit 2
fi
else
echo "unknown parameter!"
exit 3
fi
fi |
//EDIT3: PID-file is mit drin *gg*
//EDIT4: feddich ^^ Aber untestet... und bitte schlagt mich nicht *gg*
//EDIT5: Kommentare
//EDIT6: Exits eingefügt _________________ This must be thursday ...
Last edited by c_m on Thu Jun 14, 2007 11:52 am; edited 4 times in total |
|
Back to top |
|
|
Gibheer Guru
Joined: 27 Dec 2004 Posts: 300
|
Posted: Wed Jun 13, 2007 1:18 pm Post subject: |
|
|
geht das vllt auch?
Code: | /home/pieter/{return `ls /home/pieter/test`}.sh |
also das man ein ls auf das verzeichnis macht und dann einfach die 0 oder 1.sh ausfuehrt |
|
Back to top |
|
|
c_m Guru
Joined: 29 Jun 2005 Posts: 358
|
Posted: Wed Jun 13, 2007 1:20 pm Post subject: |
|
|
Code: | bash-3.00$ ls
0 1 test test.txt you.sh |
und jetzt? _________________ This must be thursday ... |
|
Back to top |
|
|
Gibheer Guru
Joined: 27 Dec 2004 Posts: 300
|
Posted: Wed Jun 13, 2007 1:28 pm Post subject: |
|
|
ich bin eben davon ausgegangen, dass da entweder das eine oder das andere verzeichnis und nix anderes drin ist. Aber wenn da mehr drin ist, dann geht es natuerlich nicht, das stimmt ^.^ |
|
Back to top |
|
|
pablo_supertux Advocate
Joined: 25 Jan 2004 Posts: 2950 Location: Somewhere between reality and Middle-Earth and in Freiburg (Germany)
|
Posted: Wed Jun 13, 2007 1:36 pm Post subject: |
|
|
Ich finde eine solche Liste ist immer brauchbar, wenn man wissen will, ob Datei xyz existiert und was sie ist:
man bash wrote: |
CONDITIONAL EXPRESSIONS
Conditional expressions are used by the [[ compound command and the test and [ builtin commands to test file attributes and perform string and
arithmetic comparisons. Expressions are formed from the following unary or binary primaries. If any file argument to one of the primaries is
of the form /dev/fd/n, then file descriptor n is checked. If the file argument to one of the primaries is one of /dev/stdin, /dev/stdout, or
/dev/stderr, file descriptor 0, 1, or 2, respectively, is checked.
Unless otherwise specified, primaries that operate on files follow symbolic links and operate on the target of the link, rather than the link
itself.
-a file
True if file exists.
-b file
True if file exists and is a block special file.
-c file
True if file exists and is a character special file.
-d file
True if file exists and is a directory.
-e file
True if file exists.
-f file
True if file exists and is a regular file.
-g file
True if file exists and is set-group-id.
-h file
True if file exists and is a symbolic link.
-k file
True if file exists and its ``sticky'' bit is set.
-p file
True if file exists and is a named pipe (FIFO).
-r file
True if file exists and is readable.
-s file
True if file exists and has a size greater than zero.
-t fd True if file descriptor fd is open and refers to a terminal.
-u file
True if file exists and its set-user-id bit is set.
-w file
True if file exists and is writable.
-x file
True if file exists and is executable.
-O file
True if file exists and is owned by the effective user id.
-G file
True if file exists and is owned by the effective group id.
-L file
True if file exists and is a symbolic link.
-S file
True if file exists and is a socket.
-N file
True if file exists and has been modified since it was last read.
file1 -nt file2
True if file1 is newer (according to modification date) than file2, or if file1 exists and file2 does not.
file1 -ot file2
True if file1 is older than file2, or if file2 exists and file1 does not.
file1 -ef file2
True if file1 and file2 refer to the same device and inode numbers.
-o optname
True if shell option optname is enabled. See the list of options under the description of the -o option to the set builtin below.
-z string
True if the length of string is zero.
string
-n string
True if the length of string is non-zero.
string1 == string2
True if the strings are equal. = may be used in place of == for strict POSIX compliance.
string1 != string2
True if the strings are not equal.
string1 < string2
True if string1 sorts before string2 lexicographically in the current locale.
string1 > string2
True if string1 sorts after string2 lexicographically in the current locale.
arg1 OP arg2
OP is one of -eq, -ne, -lt, -le, -gt, or -ge. These arithmetic binary operators return true if arg1 is equal to, not equal to, less
than, less than or equal to, greater than, or greater than or equal to arg2, respectively. Arg1 and arg2 may be positive or negative
integers.
|
/home/pieter/01pruefen.sh:
Code: |
#!/bin/bash
BASE="/home/peter/test2
wenn_0_vorhanden()
{
# TODO: write me
}
wenn_1_vorhanden()
{
# TODO: write me
}
[[ -d "${BASE}/0" ]] && wenn_0_vorhanden
[[ -d "${BASE}/1" ]] && wenn_1_vorhanden
|
_________________ A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
Last edited by pablo_supertux on Wed Jun 13, 2007 1:37 pm; edited 1 time in total |
|
Back to top |
|
|
c_m Guru
Joined: 29 Jun 2005 Posts: 358
|
Posted: Wed Jun 13, 2007 1:37 pm Post subject: Re: scriptgebastel - wenn verzeichnis .. dann 0.sh oder 1.sh |
|
|
Gibheer wrote: | ich bin eben davon ausgegangen, dass da entweder das eine oder das andere verzeichnis und nix anderes drin ist. Aber wenn da mehr drin ist, dann geht es natuerlich nicht, das stimmt ^.^ | würde afais auch dann nicht vernünftig laufen, weil:
pieter_parker wrote: | wenn beide verzeichnisse 0 und 1 existieren, soll /home/pieter/0.sh ausgefuehrt werden |
deine variante würde immer alle ausführen.
//EDIT:
@pablo_supertux in der tat. -d werd ich mir gleich mal merken ^__^ _________________ This must be thursday ... |
|
Back to top |
|
|
pieter_parker Veteran
Joined: 07 Aug 2006 Posts: 1488 Location: 127.0.0.1
|
Posted: Wed Jun 13, 2007 8:06 pm Post subject: |
|
|
das 0.sh script soll ein programm, wenn es laeuft killen
das 1.sh script soll ein programm (ueber ein anderes script), wenn es nicht laeuft aufrufen
danke fuer die muehe und erstellen
c_m aber ich steig da nicht richtig durch
lesen schon den halben nachmittag und abend hier http://www.willemer.de/informatik/unix/shskript.htm und dort http://www.linux-ag.de/linux/LHB/node26.html aber irgendwie .. gehts nicht richtig rein in den kopf, und die manpages helfen mir auch nicht weiter, auf englisch versteh ichs noch weniger |
|
Back to top |
|
|
c_m Guru
Joined: 29 Jun 2005 Posts: 358
|
|
Back to top |
|
|
Necoro Veteran
Joined: 18 Dec 2005 Posts: 1912 Location: Germany
|
Posted: Thu Jun 14, 2007 10:07 am Post subject: |
|
|
c_m wrote: | Code: | # prüfe ob schon eine instanz dieses Scriptes läuft
if [ -e $PIDFILE ]
then
echo "Already running!"
fi |
|
da vielleicht noch ein "exit" einbauen? _________________ Inter Deum Et Diabolum Semper Musica Est. |
|
Back to top |
|
|
c_m Guru
Joined: 29 Jun 2005 Posts: 358
|
Posted: Thu Jun 14, 2007 11:46 am Post subject: |
|
|
Necoro wrote: | da vielleicht noch ein "exit" einbauen? | Ergibt in der Tat Sinn _________________ This must be thursday ... |
|
Back to top |
|
|
pieter_parker Veteran
Joined: 07 Aug 2006 Posts: 1488 Location: 127.0.0.1
|
Posted: Thu Jun 14, 2007 8:07 pm Post subject: |
|
|
Code: |
#!/bin/sh
# hier liegt das pid-file
PIDFILE="/home/pieter/test/test.pid"
#parameter >=1 ?
if [ $# -ge 1 ]
then
# wenn ja und parameter =="start"
if [ $1 == start ]
then
# pruefe ob schon eine instanz dieses scriptes laeuft
if [ -e $PIDFILE ]
then
echo "already running"
fi
# tut sie nicht => pid im pid-file merken
echo $$ > $PIDFILE
#und die pruefschleife starten
while [ true ]
do
#existiert das 0-verzeichnis?
if [ -d /home/pieter/test/0 ]
then
#ja, dann abc123 killen, wenn es laeuft
if [ "$(ps ax|grep abc123|grep -v grep)" ]
then (killall abc123)
fi
# nein, aber das 1-verzeichnis vielleicht?
elif [ -d /home/pieter/test/1 ]
then
#ja, also abc123 starten, wenn es nicht schon laeuft
if [ ! "$(ps ax|grep abc123|grep -v grep)" ]
then (/usr/bin/screen -d -m /home/pieter/abc123 -config /home/pieter/abc123.config)
fi
fi
# warte 60 sec.
sleep 5;
done
# wenn ja und parameter =="stop"
elif [ $1 == "stop" ]
then
# laeuft eine instanz?
if [ -e $PIDFILE ]
then
# ja! kille sie!
kill `cat $PIDFILE`
# und loesche das pid-file
rm $PIDFILE
# wenn nicht, meldung ausgeben
else
echo "not running"
fi
fi
fi
|
so sieht das der weil bei mir aus
hab etwas dran rumgebastel versucht.. umgemacht, zurueck gemacht .. neuversucht, geloescht, wieder zurueck gemacht und hin und her probiert
soweit sogut ;-) |
|
Back to top |
|
|
Earthwings Bodhisattva
Joined: 14 Apr 2003 Posts: 7753 Location: Germany
|
Posted: Thu Jun 14, 2007 9:08 pm Post subject: |
|
|
Moved from Deutsches Forum (German) to Diskussionsforum. _________________ KDE |
|
Back to top |
|
|
|