Mit 16.04 kann kein anderer Server in Crontab gemountet werden

Mit 16.04 kann kein anderer Server in Crontab gemountet werden

Ich habe zwei Server in meinem Netzwerk und übertrage einige Daten von einem Server auf den anderen. Ich habe ein Skript geschrieben, um dies zu erreichen, und es funktioniert einwandfrei, wenn ich es manuell ausführe. Wenn ich es jedoch in crontab einbinde, um den Vorgang zu automatisieren, wird der externe Server nicht gemountet, obwohl das Skript ausgeführt wird. Ich sende so viele Informationen wie möglich an ein Protokoll, aber es werden keine Mount-Fehler gemeldet, nur die Tatsache, dass keine Verbindung hergestellt wurde.

Dies ist das Skript:

#!/bin/bash
LOGFILE="/var/log/SRV1.log"
echo $(date +%Y-%m-%d_%H:%M:%S)"  --- Begins Now" | tee -a ${LOGFILE} 
StartTime="$(date +%s)"
echo "Connecting to SRV1" | tee -a ${LOGFILE}
mount.cifs //192.168.1.200/share /media/SVR1 -o user=username,pass=pwd | tee -a ${LOGFILE}

Eigentümer der Datei ist root:root mit der Berechtigung 755. (Ich weiß, dass ich das einschränken könnte, aber ich experimentiere noch immer.)

Antwort1

Das cronProgramm läuft in einer sehr eingeschränkten Umgebung. Das sieht man zum Beispiel, wenn man eine Crontab erstellt, die enthält

* * * * * /usr/bin/printenv > /tmp/cronenv

und schauen Sie sich dann die resultierende Datei an:

$ cat /tmp/cronenv
LANGUAGE=en_CA:en
HOME=/home/steeldriver
LOGNAME=steeldriver
PATH=/usr/bin:/bin
LANG=en_CA.UTF-8
SHELL=/bin/sh
PWD=/home/steeldriver

Dasselbe gilt für rootCrontabs (also Jobs, die mit übermittelt werden sudo crontab -e):

LANGUAGE=en_CA:en
HOME=/root
LOGNAME=root
PATH=/usr/bin:/bin
LANG=en_CA.UTF-8
SHELL=/bin/sh
PWD=/root

Insbesondere PATHenthält der Standardwert nur /binund /usr/bin; das wäre in Ordnung für mount:

$ which mount
/bin/mount

das wird jedoch zum Beispiel nicht funktionieren mount.cifs, da es sich in folgendem befindet /usr/sbin:

$ which mount.cifs
/sbin/mount.cifs

Die Lösung ist entweder:

  1. Verwenden Sie für ausführbare Programme in Skripten, die als Cron-Jobs ausgeführt werden sollen, immer den vollständigen absoluten Pfad. Beispiel:

    /usr/sbin/mount.cifs //192.168.1.200/share /media/SVR1 -o user=username,pass=pwd | tee -a ${LOGFILE}
    

oder

  1. PATHFügen Sie am Anfang solcher Skripte eine entsprechende Zuordnung hinzu, z. B.

    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    

HINWEIS: Für Jobs, die aus dem Systemverzeichnis ausgeführt werden, /etc/cron.dist ein ausführlicherer Pfad explizit festgelegt in /etc/crontab:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

verwandte Informationen