
Ich habe ein Skript, das einwandfrei läuft, wenn ich es über die Befehlszeile mit Bash aufrufe. Aber wenn Cron versucht, es auszuführen, schlägt es mit dem Fehler „mysql: Befehl nicht gefunden“ fehl.
Ich denke, das liegt daran, dass Cron Bash nicht als Shell verwendet, aber ich kann nicht herausfinden, wie ich Cron dazu bringe, Bash zu verwenden.
Ich habe versucht, dies oben im Skript hinzuzufügen:
#!/bin/bash
Aber kein Erfolg. Wie zwinge ich Cron, Bash als Shell zu verwenden? Ich bin noch ziemlich neu bei Bash und Cron, also übersehe ich vielleicht etwas Einfaches. Ich habe mehrere Serverfault-Posts gelesen (würde sie alle verlinken, aber ich kann nicht, bin neuer Benutzer) und versucht, die Informationen so gut wie möglich zu verstehen und anzuwenden, außerdem habe ich viel gegoogelt, aber ich stecke fest.
Antwort1
Pulegium hat recht, das Problem ist nicht der Shell-Typ, sondern der PATH. Wenn cron ausgeführt wird, ist der Suchpfad sehr begrenzt. Anstatt mysql
Ihren Befehl einzugeben, sollten Sie /path/to/mysql
den tatsächlichen Pfad zur ausführbaren Datei eingeben. Normalerweise so etwas wie /usr/local/bin/mysql
. Sie müssen danach suchen, um den genauen Pfad zu finden. Wenn es ein Shell-Problem wäre, könnten Sie in Ihrer cron-Datei auch bash ausführen und dann Ihr Skript: /bin/bash /path/to/script.sh
, damit wäre sichergestellt, dass bash die Datei verarbeitet.
Antwort2
Am besten verwenden Sie in Cron-Skripten absolute Pfade zu Befehlen, damit Sie sich nicht auf eventuell angepasste PATH-Einstellungen verlassen müssen.