"/ Usr / bin / env bash" wird beim Ausführen eines Cron-Skripts nicht gefunden

0

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.log ist das Folgende:

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

/usr/bin/env ebenso gut wie /bin/bash beides existiert. Und ich kann diesen Befehl auch ohne Fehler von demselben Benutzer ausführen, zu dem diese crontab gehört. Ich habe auch versucht, hinzuzufügen

SHELL=/bin/bash

an die Spitze der Crontab. Keine Wirkung. Ich habe 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 meinem crontab habe, sonst nichts.

snitko
quelle
Ist das ein Tippfehler in Ihrem letzten Beispiel, sollte er nicht lauten? `which bash`, anstatt which bash?
BenjiWiebe

Antworten:

4

Da dein Drehbuch das cron Läuft beginnt mit #!/usr/bin/env bash ( Recht? ), alles was Sie in Ihrem tun müssen crontab ist:

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

Und stellen Sie sicher, dass das Skript tatsächlich etwas ausgibt. Wenn Ihr Skript vollständig leise ist, wird Ihre Protokolldatei werden sei leer.

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

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

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

Das Entfernen von crontab hat das Problem behoben.

snitko
quelle
Deine Kombination und @benjiwiebe haben mein Problem gelöst. Cron ist wirklich zu dumm, um etwas zu wissen. Der Standardpfad ist grundsätzlich 2 Verzeichnisse.
chovy
-3

Bin mir nicht sicher, was genau du versuchst, aber für mich:

# which bash
/bin/bash

Also versuche

/usr/bin/env /bin/bash /path/to/some/script > ~/cron.log 2>&1
Stephan
quelle
Eines der Skripte, die ich mit cron ( rvm-exec ) hat #!/usr/bin/env bash Oben drauf und ich kann es nicht wirklich ändern, weil es alles kaputt macht. Ich erkannte, dass das Problem in diesem speziellen Fall bei cron und nicht bei rvm liegt, da cron nicht einmal weiß, wo bash ist.
snitko
3
Es macht dem Verwendungszweck nichts aus /usr/bin/env /bin/bash; /usr/bin/env durchsucht den Pfad nach bash; Sie verwenden /usr/bin/env finden bash wenn Sie nicht sicher sind, wo bash ist bei.
BenjiWiebe
ruf einfach bash auf crontab an
chovy