"/ usr / bin / env bash" wird nicht gefunden, wenn ein Cron-Skript ausgeführt wird

7222
snitko

Ich habe das in meinem Crontab:

PATH=/usr/bin:/usr/local/bin:$PATH */1 * * * * /usr/bin/env bash > ~/cron.log 2>&1 

Die Ausgabe in cron.logist die folgende:

/usr/bin/env bash: No such file or directory 

/usr/bin/envsowie /bin/bashbeide existieren. Und ich kann diesen Befehl auch von demselben Benutzer ausführen, zu dem diese Crontab ohne Fehler gehört. Ich habe auch versucht, hinzuzufügen

SHELL=/bin/bash 

zur Spitze des Crontab. Keine Wirkung. Keine Ahnung, was los ist. Auch das:

*/1 * * * * which bash > ~/cron.log 2>&1 

zeigt überhaupt nichts in der Protokolldatei. Dies ist alles, was ich für diesen Benutzer in meiner Crontab habe, sonst nichts.

0
Ist das ein Tippfehler, sollte es in Ihrem letzten Beispiel nicht `\` which bash \ `` statt `which bash` lauten? BenjiWiebe vor 11 Jahren 0

3 Antworten auf die Frage

4
BenjiWiebe

Da Ihr Skript, crondas ausgeführt wird, mit #!/usr/bin/env bash( richtig? ) Beginnt, müssen Sie in Ihrem crontabnur Folgendes tun :

*/1 * * * * /path/to/script > ~/cron.log 2>&1 

Stellen Sie sicher, dass das Skript tatsächlich etwas ausgibt. wenn Ihr Skript völlig ruhig ist, Ihre Log - Datei wird leer sein.

Ich musste PATH = "/ usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / local / games" hinzufügen. auch. Ich musste mich als root (nicht sudo) am Server anmelden, um herauszufinden, wie der Root-Pfad standardmäßig war. Anscheinend ist cron zu dumm, um das Standardprofil des Benutzers zu verwenden chovy vor 8 Jahren 0
1
snitko

Es stellte sich heraus, dass ich diese Zeile nicht hätte haben sollen:

PATH=/usr/bin:/usr/local/bin:$PATH 

Durch das Entfernen von Crontab wurde das Problem behoben.

Ihre Kombination an @ benjiwiebe hat mein Problem gelöst. Cron ist wirklich zu dumm, um etwas zu wissen. Der Standardpfad ist im Wesentlichen 2 Verzeichnisse. chovy vor 8 Jahren 0
-3
Stephan

Am not sure what exactly you're trying to do, but for me:

# which bash /bin/bash 

So try

/usr/bin/env /bin/bash /path/to/some/script > ~/cron.log 2>&1 
Eines der Skripte, die ich mit cron (`rvm-exec`) laufen lasse, hat` #! / Usr / bin / env bash` an der Spitze und ich kann es nicht wirklich ändern, da es alles kaputt macht. Mir wurde klar, dass das Problem in diesem speziellen Fall mit cron und nicht mit rvm ist, da cron nicht einmal weiß, wo sich bash befindet. snitko vor 11 Jahren 0
Der Zweck der Verwendung von `/ usr / bin / env / bin / bash 'wird dadurch völlig aufgehoben. `/ usr / bin / env` sucht im PATH nach` bash`; Sie verwenden `/ usr / bin / env`, um` bash` zu finden, wenn Sie nicht sicher sind, wo sich `bash` befindet. BenjiWiebe vor 11 Jahren 3
Rufen Sie einfach Bash oben in Crontab an chovy vor 8 Jahren 0