Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 4098 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 ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Windows Server
Windows Remote App - Ausgabe in lokales Office (1)

Frage von fluluk zum Thema Windows Server ...

Erkennung und -Abwehr
Port 7547 SOAP Remote Code Execution Attack Against DSL Modems Internet Storm Center (5)

Link von Lochkartenstanzer zum Thema Erkennung und -Abwehr ...

Windows Server
Remote App Manger Server 2016 (2)

Frage von opc123 zum Thema Windows Server ...

Windows Server
Windows Server 2008 R2 Aero-Design auf Remote Desktop geht nicht (3)

Frage von Motherboard33 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...