Ich habe eine Datei auf meiner Linux-Box, die von einem Python-Skript generiert wird. Die Datei wird im Verzeichnis /root/ abgelegt.
Mein Bash-Skript sieht folgendermaßen aus:
#!/bin/bash
# Run the HR Data feed
cd /root/hr-feed
# the file created here will land one directory above the scripts in /root/
python main.py
# Transfer the file to the server
cd /root/
smbclient \\\\[SERVER]\\[SHARE] --workgroup=[WRKGRP] --user=[USR] [PASS] -c 'put HRDataFeed.txt'
Bis zur letzten Zeile funktioniert alles wie gewünscht. Es muss mit einem Fehler ausgeführt werden (obwohl ich nicht ganz sicher bin, wie ich herausfinden kann, was dieser Fehler sein könnte).
Dieser Job wird von der Crontab ausgeführt. Soweit ich weiß, läuft diese in einer etwas anderen Umgebung als Root (oder zumindest scheint es so, als ob das so wäre, wenn man sich das so ansieht).
Wenn ich das Skript direkt ausführe (nicht aus der Crontab), läuft es reibungslos und die Datei wird auf den Ziel-Windows-Server übertragen. Ich vermute, dass ich möglicherweise den vollständigen Pfad zur Datei HRDataFeed.txt als Teil des Put-Befehls angeben muss. Ich kann das jedoch nicht herausfinden.
smbclient .... -c "put /root/HRDataFeed.txt"
führt zu einem Fehler, dass die Datei/root/HRDataFeed.txtkann nicht gefunden werden.
Wir sind für jeden Beitrag sehr dankbar.
BEARBEITEN
Ich habe versucht, meine Crontab zu aktualisieren, um sie zu lesen (zum Testen ließ ich sie jede Minute laufen).
- /root/hrdatafeed > last_run.txt
Es schien jedoch, als sei nie etwas in der Datei gelandet.
Ich werde versuchen, dem SMBClient-Befehl direkt eine Pipe hinzuzufügen.
Antwort1
Cron versucht, eine E-Mail zu senden (mit /usr/bin/sendmail
), wenn ein Befehl fehlschlägt - das ist der einzige mir bekannte Weg, um die tatsächliche Ausgabe des Skripts zu erhalten (Sie könnten installierensSMTPum dies relativ einfach zum Laufen zu bringen). Der Hauptunterschied in der Cron-Umgebung ist normalerweise $PATH
, also versuchen Sie, PATH
in der Crontab ein entsprechendes Attribut festzulegen, das das Verzeichnis enthält, in dem smbclient
sich befindet.
Antwort2
Am Ende habe ich das Skript leicht umgeschrieben, sodass es folgendermaßen lautet:
#!/bin/bash
# Run the HR Data feed
cd /root/hr-feed
python main.py
# Transfer the file to the server
cd /root/
/usr/bin/smbclient \\\\[SERVER]\\HRDataFeed --workgroup=[WRKGRP] --user=[USR] [PASS] -c 'put HRDataFeed.txt'
Ich habe meine Crontab wie folgt geändert:
- sh /root/hrdatafeed.sh > /root/last_run > 2>&1
Endlich konnte ich in der letzten Ausführungsdatei einige sinnvolle Nachrichten erhalten. Obwohl es keine Fehler gab, gehe ich davon aus, dass es daran lag, dass ich die Änderung vorgenommen hatte, den vollständigen Pfad zum smbclient-Befehl festzulegen.
Vielen Dank für Ihre Hilfe bei der Lösung dieses Problems.
Jetzt werde ich natürlich die Cron-Registerkarte aktualisieren, damit sie etwas seltener ausgeführt wird ;)