Ich führe Debian-Tests durch und kann keinen einfachen Cron dazu bringen, ein symbolisch verknüpftes PHP-Skript auszuführen.
Ich habe ein PHP-Skript in einem Unterverzeichnis in meinem Home-Ordner /home/foobar/dir/script.php
(das mit dem folgenden Shebang beginnt #!/usr/bin/env php
).
Ich habe einen symbolischen Link erstellt, der darauf verweist:
sudo ln -s ~/dir/script.php /usr/local/bin/whatever
ls -la /usr/local/bin
lrwxrwxrwx 1 root staff 24 Feb 27 17:46 whatever -> /home/foobar/dir/script.php*
Und habe meiner Crontab die folgende Regel hinzugefügt ( whatever
jede Minute ausführen):
crontab -e
* * * * * whatever
Aberes funktioniert nicht, erhalte ich die folgende Fehlermeldung:
cat /var/mail/foobar
...
/bin/sh: 1: whatever: not found
WährendDas Zeigen auf das Skript ohne Verwendung des Symlinks funktioniert:
crontab -e
* * * * * /home/foobar/dir/script.php
Irgendeine Idee?
Antwort1
Verzeichnisse wie /usr/local/bin
und /usr/local/sbin
sind standardmäßig nicht in Cronjobs enthalten $PATH
. Sie können sie jedoch $PATH
in Crontab neu definieren, indem Sie einfach so etwas wie dies vor alle definierten Cronjobs setzen
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Antwort2
Die Umgebungsvariable $PATH unter cron ist begrenzt und enthält weder /usr/local/bin noch /home/foobar/dir. Die richtige Antwort ist, wie Sie festgestellt haben, den Pfad zum Skript in Ihrer Crontab vollständig zu qualifizieren. Dies führt zu weniger Überraschungen.