script wird von Cron ausgeführt, aber einige Befehle nicht

K

kolvar

Mitglied
Moin moin,

nachdem ich jetzt einige Zeit mit dem Script rumgewürgt habe (und ich gebe gerne zu, dass ich kein Shell-Script spezialist bin) hat mich nun der Frust doch gepackt und ich frage lieber nach:

Ausgangssituation: zwei Debian Server, die beide apache (der eine 1.3, der andere 2), samba und einen Mount laufen haben, auf dem der jeweilige DocRoot des apache liegt.
Die verzeichnisse, die gemounted werden, liegen auf einem weiteren Server (ein openE gesteuertes Monstrum). Wenn der OpenE-Server runtergefahren wird, hängen sich regelmäßig die beiden Debians auf, weswegen jetzt ein Script fällig ist, über den das ganze umount-gerammel (mit vorhirigem ausschalten des Samba und Apache) durchgeführt werden soll.

So, klein-kolvar dachte sich nun, schreibe ich doch mal ein kleines Shellscript, mit dem man vom einen server aus den anderen gleich mit ausschalten können soll. Erschwerend kam noch hinzu, dass dies von der Weboberfläche über ein php-script gehen soll. Nach ein wenig rumgezuzzel mit php (safe-mode muss aus bleiben, weswegen es da schon Einschränkungen gibt) klappte dass pure ausschalten von php aus schon mal nicht (Script wurde ausgeführt mit der hübschen Fehlermeldung, dass apache nicht gestoppt werden kann -- macht ja auch irgendwie sinn, ist aber nicht hilfreich an dieser Stelle).

Habe ich mir in meinem kranken hirn also eine andere Lösung überlegt: php schreibt einfach eine Datei, ein Cronjob führt ein runterfahrscript aus, wenn diese Datei vorhanden ist (nicht hauen, bitte --> wenn mir jemand eine Möglichkeit sagt, wie ich apache über php stoppen kann (und samba) dann mache ich das liebend gerne)

Script sieht wie folgt aus:


Code:
#!/bin/bash

if [ -e "/var/serverdown/godown.txt" ]
then
apachectl stop;
   /etc/init.d/samba stop;
   rm -rf /var/serverdown/godown.txt;
   umount /var/virtual;
   ssh root@192.168.2.10 '/etc/init.d/apache2 stop;/etc/init.d/samba stop;umount
fi


cron tut seine Arbeit und führt tatsächlich dieses Script aus. Das merke ich daran, dass die godown.txt tatsächlich gelöscht wird. Aber die Server laufen weiter. Wenn ich es einfach per Hand als root starte, macht es all das, was ein gutes script tun sollte. Daher gehe ich dann ja schon von irgendwelchen Rechten aus, aber wie sage ich es meinem Cron?
Oder ist es irgendwas anderes? Was mache ich falsch?
(und bitte haut mich nicht ... auch nicht verbal)

Danke im Voraus
 
Hallo
Sorry, aber das hatten wir jetzt schon dreimal die Woche.
Wessen cronjob ist das?
root?
Cronjob-Skripte laufen in einen noninteractiven Shell, ohne Umgebungsvariablen des Users!

Wenn das Script als root läuft, dann startet es wohl in der Verzeichnisebene von root.
Dort liegt vermutlich keine apachectl oder umount.
Merkst du was?
Also solltest du die PATH setzen (in der crontab, oder im Script), oder absolute Pfade verwenden.

Fehlermeldungen solltest du dir per Mail (auch im Kopf von crontab konfigurierbar) zusenden lassen. Dann bekommst du auch die Fehlermeldungen mit.

ssh root@192.168.2.10 erwartet keine Passwort?
Wenn ja, dann regel das über Pubkey und config.


Gruß Wolfgang
 
Danke, dass du trotzdem geantwortet hast.

Die ganze Pubkeygeschichte habe ich schon eingebaut (wie gesagt, dass Script läuft ja von der Shell, wenn per Hand gestartet)
 

Ähnliche Themen

Windows clients können nicht mehr auf lange laufendes System zugreifen

Debian squeeze, Webmin, Samba Freigaben

USB Geräte per Bash Script resetten (Gerät hängt sich öfter mal auf)

Userwechsel

Samba Update von 3.2.5 auf 3.5.6 - Probleme beim Server Browsen

Zurück
Oben