Ich habe ein test.sh-Skript
#!/bin/sh
php /home/v/file.php
sh /root/x/some.sh
Wenn ich die Datei als root von der Kommandozeile aus ausführe, funktioniert es.
sh /home/v/test.sh
wenn ich es auf crontab -e setze (ist das root cron), funktioniert es nicht
* * * * * sh /home/v/test.sh
Was mache ich falsch? Vielen Dank
Antworten:
Nach dem Mann:
Daher weiß cron daemon nicht, wo sich PHP befindet, und Sie sollten den vollständigen PHP-Pfad zum Beispiel von Hand angeben (ich kenne Ihren tatsächlichen PHP-Pfad nicht):
Eine andere Möglichkeit besteht darin, zum Beispiel die Datei / etc / profile (oder Ihr .profile / .bashrc) zu verwenden
Dies ist nützlich, wenn Ihre .bashrc-Datei die Umgebungsvariablen festlegt, die Sie benötigen (z. B. PATH).
BEARBEITEN
Eine interessante Lektüre ist " Newbie: Intro to cron ", unterschätzen Sie nicht den Artikel aus dem Titel (Es ist eine Lektüre für alle), in der Tat ist es gut vollständig geschrieben und beantwortet Ihre Frage perfekt:
quelle
Es gibt vier häufige Ursachen für Befehle, die bei der Eingabe in ein Terminal, jedoch nicht von cron, in der angegebenen Reihenfolge ausgeführt werden:
$PATH
, und andere erwartete Variablen fehlen.Wenn Ihr Auftrag eine Ausgabe, einschließlich Fehlermeldungen, erzeugt, sendet Ihnen cron eine E-Mail mit der gesamten Ausgabe. Stellen Sie sicher, dass Sie die E-Mail lesen, die Sie lokal erhalten, oder leiten Sie sie an eine von Ihnen gelesene Adresse weiter. Geben Sie die andere Adresse ein, um E-Mails von einem lokalen Konto an eine andere Adresse weiterzuleiten
~/.forward
. Wenn der Cron - Job als Systembenutzer ausgeführt wird (root
,webmaster
, ...), stellen Sie sicher , dass der Benutzer Mail an Sie weitergeleitet wird (und jede andere admin); Setzen Sie bei den meisten Mail-Setups Zeilen wieroot: elzo
in/etc/aliases
.quelle
Der Cron-Daemon führt Ihren Befehl normalerweise in einer Shell aus, in der die Umgebungsvariable PATH auf bestimmte Systemstandards beschränkt ist, z. B. / usr / bin: / bin.
Wahrscheinlich ist Ihr
php
Befehl in / usr / bin oder / bin nicht verfügbar, und daher schlägt das Skript fehl, wenn es über cron ausgeführt wird, und wird erfolgreich ausgeführt, wenn es nicht ausgeführt wird.Cron meldet normalerweise Fehler oder Jobmeldungen per E-Mail an den Root-Benutzer (dh wenn ein Befehl einen Exit-Status zurückgibt! = 0 oder eine Ausgabe an stdout / stderr erzeugt), nachdem der Job beendet ist.
Abhängig von Ihrem System müssen Sie die lokale E-Mail-Zustellung einrichten, um diese Nachrichten zu erhalten.
quelle