Ich habe einige Befehle, sie arbeiten unter Bash, aber nicht als Cronjob. Um zu sehen, was das Problem verursacht, speichere ich die Ausgabe in einer Datei, hier mein Beispiel:
51 * * * * source ~/.rvm/scripts/rvm >> stack.log 2>&1
Der Inhalt der Protokolldatei lautet:
/bin/sh: 1: source: not found
Das heißt, Cron verwendet sh
Insead von bash
. Ich habe versucht, es zu ändern in /etc/crontab
:
SHELL=/bin/bash
Das funktioniert aber nicht. Ich habe in die /etc/passwd
und hier sehe ich, dass der Dämon sh
als Standard-Shell verwendet. Beide root
und pi
haben bash
als Standard-Shell.
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
pi:x:1000:1000:,,,:/home/pi:/bin/bash
Was soll ich tun, um die Standard-Shell für cron zu ändern? Ich würde nicht /bin/bash
für den Daemon-Benutzer /etc/passwd
einstellen in ... imho das ist keine gute Idee.
bearbeiten :
ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 30 2012 /bin/sh -> dash
hier der Inhalt der /etc/crontab
:
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
source
in crons Umgebung? Einfach das laufen zu lassen~/.rvm/scripts/rvm
funktioniert nicht? Und Sie können Probleme mit der Verwendung von ~ in Nicht-Bash-Umgebungen haben.