Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Remote befehl mit dbclient rückgabewert bei cron ausführung verschwunden

Frage Entwicklung Batch & Shell

Mitglied: Asgaroth

Asgaroth (Level 1) - Jetzt verbinden

29.03.2011 um 16:08 Uhr, 4177 Aufrufe, 2 Kommentare

Skript funktioniert bei normaler Ausführung, jedoch nicht bei Ausführung per cron/crontab (vmware esxi, busybox, /bin/sh)

Hallo,

ich habe ein Shell-Script auf unserem ESXi Server geschrieben, welches auf einem anderen ESXi Server einen Befehl ausführt ( df ).
Wenn ich das Script "per Hand" ausführe und den Rückgabewert ausgebe, funktioniert alles, wie es soll. Wenn ich das ganze in /var/spool/cron/crontab/root packe, funktioniert es nicht mehr und ich erhalte keinen Rückgabewert.

1. Hier das Skript (Minimalbeispiel):

#!/bin/sh
someval=$(/bin/dbclient -i /.ssh/serverx_rsa root@192.168.1.55 "df | grep Datastore | awk '{print $4 $6}'")
echo $someval > /tmp/returnvalue

dbclient ist der auf dem ESXi vorhandene dropbearclient, -i ist der rsa key (identity file) für Authentifizierung ohne Passwort.

2. Folgendes habe ich schon überprüft:

cronjob wird als root ausgeführt.
Die Verbindung zum Remote-Server funktioniert (erfolgreiche Verbindung steht in /var/log/messages auf Remote-Server und ein Aufruf mit touch /tmp/testfile anstatt df legte diese Datei an)
Am awk oder grep liegt's nicht, ein Ersetzen des auszuführenden Befehls mit "echo "hallo" oder nur "df" ergab ebenfalls keine Rückgabewerte.
Ich habe den auszuführenden Befehl mit und ohne " und in vielen Varianten ausprobiert....
Ich habe versucht, den Rückgabewert direkt auszugeben (mittels echo) und direkt in eine Datei umzuleiten.

Das einzige was ich mir noch vorstellen kann, wäre, dass der dbclient Befehl vom cron in einer subshell ausgeführt wird, allerdings müsste dann ein direktes Ausgeben per echo doch funktionieren. Außerdem würde es dann wahrscheinlich beim manuellen Ausführen auch nicht funktionieren.

Vielleicht hat ja jemand ne Idee!

Vielen Dank schonmal für Antworten,
asgaroth
Mitglied: Asgaroth
19.04.2011 um 13:53 Uhr
Ich habe jetzt herausgefunden, dass es scheinbar daran liegt das beim Aufruf mit cron kein Terminal zugewiesen wird. Ich konnte dieses Problem durch das explizite zuweisen eines
Pseudoterminals zum Teil lösen.

Der obige Befehl sieht dann abgeändert wie folgt aus:

someval=$(/bin/dbclient -i /.ssh/serverx_rsa root@192.168.1.55 "df | grep Datastore" < /dev/ptyp7)

Die " " um den auszuführenden Befehl sind wichtig.
Das Pipen in anderen Befehle funktioniert aber nur zum Teil (u.a. wenn " verwendet werden).

Daher dann das ganze erst in der Ausgabe:

echo $someval | awk '{print $4 " " $6}' > /tmp/returnvalue

So funktionierts jetzt zumindest zum Teil (teste gerade nochmal alles). Falls ich das Skript im Ganzen zum laufen bekomme markiere ich den Beitrag hier als gelöst!
Bitte warten ..
Mitglied: eddylucas
19.04.2011 um 16:38 Uhr
Hi,
ich habe die letzten paar Tage zufälligerweise genau das gleiche Problem gehabt.
Und heute hab ich endlich die Lösung gefunden:

Ich wollte in etwa folgenden Befehl von crond ausführen lassen:
dbclient -T -i /.ssh/keys/work.db root@192.168.1.5 -R 4545:192.168.1.5:22

-T habe ich angegeben, damit explizit kein PTY zugewiesen wird.
Diese Zeile habe ich der einfachheithalber in ein Skript gepackt, inklusive einer Testzeile, damit ich später prüfen konnte, ob das Skript überhaupt von crond ausgeführt wird:

dbconn.sh
01.
#!/bin/ash 
02.
echo test >> /tmp/test.txt 
03.
dbclient -T -i /.ssh/keys/work.db root@192.168.1.5 -R 4545:192.168.1.3:22
Dieses Skript starte ich manuell und lasse es im Hintergrund laufen mit:
nohup /sbin/dbconn.sh &
(Falls unbekannt: nohup (No Hangup) stellt sicher, dass ein damit gestarteter Prozess beim z.B. ausloggen nicht beendet wird.)

Da das ganze manuell funktionierte, probierte ich als nächstes diesen Aufruf per crond automatisch starten zu lassen.
Crond führte dann auch auf jeden Fall das Skript aus, denn /tmp/test.txt wuchs in dem Intervall, das ich in der crontab definiert hatte, stetig an.
Doch dbclient wollte partout keine Verbindung zu 192.168.1.5 aufbauen und der Process beendete sich nach kurzer Zeit einfach!
Nach langem rumprobieren hab ich dann jedoch endlich des Rätsels Lösung gefunden:
Ein simples -N als weiterer Parameter... und alles läuft wie es soll.
D.h. das Skript lautet nun in seiner Finalversion so:
01.
#!/bin/ash 
02.
dbclient -T -N -i /.ssh/keys/work.db root@192.168.1.5 -R 4545:192.168.1.3:22
Laut http://linux.die.net/man/1/dbclient steht -N für:
Don't request a remote shell or run any commands. Any command arguments are ignored.

Ich habe bisher noch nicht probiert, ob das -T überflüssig macht. Ich war heute erstmal froh, dass ich's hinbekommen habe.
Hoffe das hilft dir und anderen, war wieder mal ein Problem wo selbst stundenlanges Googlen keine Früchte trug, sondern gutes altes Trial & Error.^^

Gruß und frohe kommende Ostern!
Bitte warten ..
Ähnliche Inhalte
Visual Studio
Rückgabewerte von Funktionen
Frage von MarcoBornVisual Studio9 Kommentare

Hallo Forum, ich schreibe gerade in VB.NET eine Funktion, die als Rückgabewert einen Double-Wert zurückliefert. Wenn jedoch vom Nutzer ...

Windows 7
Powershell remote CMD Befehle ausführen
Frage von today12Windows 75 Kommentare

Hallo Leute, da ich nach stundenlanger Sucher nicht fündig geworden bin, hoffe ich jetzt auf eure Unterstützung. Als Beispiel ...

Python
Rückgabewert von MySQL-Funktion
gelöst Frage von NativeModePython4 Kommentare

Hallo, ich habe für eine mySQL-Abfrage eine eigene Funktion erstellt und abgespeichert: Soweit so gut, das funktioniert wenn ich ...

Microsoft Office
Excel bei bestimmten Werten einen Rückgabewert
gelöst Frage von easy4breezyMicrosoft Office2 Kommentare

Hi Leute, es geht sozusagen um ein Ticketsystem mit Prioritäten. Die 3 Prioritäten sind Low, Medium und High, die ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 17 StundenWindows 102 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 19 StundenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 1 TagInternet3 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 1 TagDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
TK-Netze & Geräte
VPN-fähige IP-Telefone
Frage von the-buccaneerTK-Netze & Geräte16 Kommentare

Hi! Weiss noch jemand ein VPN-fähiges IP-Telefon mit dem man z.B. einen Heimarbeitsplatz gesichert anbinden könnte? Habe nur einen ...

Windows Server
GPO nur für bestimmte Computer
Frage von Leo-leWindows Server13 Kommentare

Hallo Forum, gern würde ich ein Robocopy script per Bat an eine GPO hängen. Wichtig wäre aber dort der ...

Windows Server
KMS Facts for Client configuration
Frage von winlinWindows Server13 Kommentare

Hey Leute, wir haben in unserem Netz nun einen neuen KMS Server. Haben Bestands-VMs die noch nicht aktiviert sind. ...

Windows Tools
Software-Tool zum Entfernen von bösartigem Windows
Frage von emeriksWindows Tools11 Kommentare

Hi, siehe Betreff hat das jemals irgendjemand schonmal sinnvoll eingesetzt? (MRT) E.