[Solaris] Skript -> Variable setzen -> Crontab

E

-eraz-

Tripel-As
Hallo Leute,

ich muss mich leider gerade etwas mit unserm sturen Solaris Server ärgern. Hauptsächlich habe ich es eigentlich mit RedHat zu tun, deshalb bin ich mit den Eigenheiten von Solaris nicht wirklich vertraut.
Ich habe ein Skript in dem ich mehrere Variablen setzen muss und dieses wird dann per Crontab ausgeführt. Nur leider scheine ich hier nicht den richtigen Befehl zu finden. Entweder sagt er mir das die Syntax falsch ist oder er macht es einfach nicht. Das Skript sollte manuell und per Crontab funktionieren, folgendes habe ich bereits versucht:

Code:
VARIABLE="wert"
oder
Code:
set VARIABLE="Wert"
oder
Code:
setenv VARIABLE = "Wert"

keiner dieser genannten funktioniert richtig. :(
 
Variante 1 funktioniert hier problemlos. An der Shell und in Cron.

Fehlt evtl. ein export?
 
funktioniert aber nicht in einer C Shell oder?
Soweit funktioniert zwar die erste Variante mit root manuell und mit Crontab, aber dann nicht mit einem User der mit einer C Shell arbeitet. (root arbeitet mit der Korn Shell).
 
Soweit ich mich erinnere, verwendet cron unter Solaris standardmässig die Bourne Shell (SHELL=/bin/sh). Damit sollte also die erste Variante laufen.

Um sicherzustellen, dass auch ein C-Shell-Benutzer so ein Skript ohne Umstände aufrufen kann, müsstest du als erste Zeile ein
Code:
#!/bin/sh
einfügen. Diese Zeile ("Shebang") teilt allen einigermassen vernünftigen Shells mit, welches Programm zur Ausführung des Skripts verwendet werden soll.

Gruss
 
Soweit ich mich erinnere, verwendet cron unter Solaris standardmässig die Bourne Shell (SHELL=/bin/sh). Damit sollte also die erste Variante laufen.

Code:
bit@unknown:~$ ls -lh /bin/sh
lrwxrwxrwx 1 root root 13 2008-11-26 00:45 /bin/sh -> ../../sbin/sh
bit@unknown:~$ ls -lh /sbin/sh 
lrwxrwxrwx 1 root root 20 2008-11-26 00:41 /sbin/sh -> ../usr/bin/i86/ksh93
bit@unknown:~$ ksh93 --version
  version         sh (AT&T Research) 1993-12-28 s+

Ich würde mich ja nicht auf den Softlink /bin/sh verlassen, sondern die gewünschte Shell direkt via Shebang aufrufen, als #!/bin/bash für die Bash, #!/bin/csh für die C-Shell und #!/bin/ksh für die Korn-Shell.
 
@bitmuncher:

guter Einwand, im Prinzip einverstanden.

Wenn man in einer Umgebung mit diversen UNIX-Varianten unterwegs ist, ist es aber doch irgendwie schön, wenn man sich auf ein paar Standards verlassen kann. Und die "/bin/sh" ist halt normalerweise (ein Link auf) eine Bourne Shell - oder was auch immer auf der aktuellen Plattform der Bourne Shell am nächsten kommt (also bash auf Linux).

Deshalb wäre mir etwas unwohl bei deinem Setup, wo offensichtlich die /sbin/sh durch eine Korn Shell ersetzt worden ist. Bei mir (dürfte eine "normale" Solaris 10 sein) sieht das so aus:

Code:
# uname -a
SunOS dumbo 5.10 Generic_137137-09 sun4v sparc SUNW,SPARC-Enterprise-T5120
# ls -l /bin/sh
lrwxrwxrwx   1 root     root          13 Nov 13 12:46 /bin/sh -> ../../sbin/sh
# ls -l /sbin/sh
-r-xr-xr-x   1 root     root       95468 May 22  2008 /sbin/sh
# file /sbin/sh
/sbin/sh:       ELF 32-bit MSB executable SPARC Version 1, dynamically linked, stripped
# grep /sbin/sh /var/sadm/install/contents
...
/sbin/sh f none 0555 root root 95468 59398 1211409282 SUNWcsr
...
# pkginfo -x SUNWcsr
SUNWcsr  Core Solaris, (Root)
         (sparc) 11.10.0,REV=2005.01.21.15.53
#

Aber solange alles läuft ... alles 8) ...
 
Ist die Standard-Shell von OpenSolaris (x86). Hab da nicht's geändert, wobei auch mit der Bash alles einwandfrei funktionieren soll. Ich nutze in meinen Skripten jedenfalls immer den direkten Aufruf des Interpreters. Bisher hat sich das bewährt. So ist man unabhängig davon, welche Shell im System benutzt wird. Die gewünschte muss nur installiert sein.
 
Na, dann hab ich was dazugelernt ... hatte hier gerade keine Intel-Solaris-Maschine greifbar, alles Sparc. Merci für den Update!
 
Ich nutze in meinen Skripten jedenfalls immer den direkten Aufruf des Interpreters. Bisher hat sich das bewährt. So ist man unabhängig davon, welche Shell im System benutzt wird. Die gewünschte muss nur installiert sein.
Ist man doch mit "#!/bin/sh" auch, sogar noch unabhängiger: es muss nur irgendeine bourne-shell kompatible shell im System installiert sein. Das dürfte häufiger der Fall sein als eine explizite bash oder korn shell.
 
Zurück
Oben