Cronjob没有在webfaction上工作

时间:2011-05-20 07:44:02

标签: django cron crontab webfaction

我创建了以下cronjob,每5分钟运行一次,但由于某种原因,它没有。

*/05 * * * * ~/webapps/django/shop/update

当我尝试从shell运行脚本时,它运行完美。脚本的内容(尝试运行自定义django命令)是

python2.7 manage.py updateTime

关于什么可能出错的任何想法?

感谢。

编辑:

shell环境变量:

BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="3" [1]="2" [2]="25" [3]="1" [4]="release" [5]="i686-redhat-linux-gnu")
BASH_VERSION='3.2.25(1)-release'
COLORS=/etc/DIR_COLORS.xterm
COLUMNS=157
CVS_RSH=ssh
DIRSTACK=()
EDITOR=emacs
EUID=629
GROUPS=()
G_BROKEN_FILENAMES=1
HISTFILE=/home/shopperspoll/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000
HISTTIMEFORMAT='%F %T '
HOME=/home/shopperspoll
HOSTNAME=web192.webfaction.com
HOSTTYPE=i686
IFS=$' \t\n'
INPUTRC=/etc/inputrc
LANG=en_US.UTF-8
LESSOPEN='|/usr/bin/lesspipe.sh %s'
LINES=46
LOGNAME=shopperspoll
LS_COLORS='no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:'
MACHTYPE=i686-redhat-linux-gnu
MAIL=/var/spool/mail/shopperspoll
MAILCHECK=60
OLDPWD=/home/shopperspoll
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/shopperspoll/bin
PIPESTATUS=([0]="0")
PPID=18520
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\007"'
PS1='[\u@\h \W]\$ '
PS2='> '
PS4='+ '
PWD=/home/shopperspoll
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
SHLVL=1
SSH_CLIENT='99.65.178.55 59982 22'
SSH_CONNECTION='99.65.178.55 59982 174.133.20.142 22'
SSH_TTY=/dev/pts/11
TERM=xterm
UID=629
USER=shopperspoll
_=test
consoletype=pty
tmpid=629

cron环境变量:

BASH=/bin/sh
BASH_ARGC=()
BASH_ARGV=()
BASH_EXECUTION_STRING='set >/home/shopperspoll/test'
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="3" [1]="2" [2]="25" [3]="1" [4]="release" [5]="i686-redhat-linux-gnu")
BASH_VERSION='3.2.25(1)-release'
DIRSTACK=()
EUID=629
GROUPS=()
HOME=/home/shopperspoll
HOSTNAME=web192.webfaction.com
HOSTTYPE=i686
IFS='
'
LOGNAME=shopperspoll
MACHTYPE=i686-redhat-linux-gnu
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/bin:/bin
POSIXLY_CORRECT=y
PPID=24949
PS4='+ '
PWD=/home/shopperspoll
SHELL=/bin/sh
SHELLOPTS=braceexpand:hashall:interactive-comments:posix
SHLVL=1
TERM=dumb
UID=629
USER=shopperspoll
_=/bin/sh

3 个答案:

答案 0 :(得分:4)

第一步:用以下代码替换cron条目:

*/05 * * * * date >/tmp/qqdate

通过检查qqdate是否已创建/更新,看到 实际正在运行。

然后,尝试使用update脚本的完整路径名(没有~个字符) - 代字号是cron可能无法理解的shell内容。

除此之外,大多数cron问题在shell中工作但不在cron范围内,通常与cronjobs获得的极小的环境有关。

在你的shell中执行set,使用cronjob执行一个,并找出差异。 cronjob可能缺少重要的环境变量。


我通常做的是获取shell变量文件(来自set >shellvarfile),在每行之前放置一个导出,并从我的cronjob脚本中获取(带. /path/to/shellvarfile)。如果它修复它,那么我知道这是一个环境问题,这是一个一个一个地评论这些行直到它再次破坏的问题。你注释掉的最后一个是必需的,所以取消注释并标记它。然后继续前进,直到尽可能多的注释掉。

如果做不到这一点,请尝试解决为什么失败的问题。将cronjob更改为:

*/05 * * * * /path/to/webapps/django/shop/update >/tmp/debug 2>&1

然后等待它运行并检查该文件的内容以寻找线索。假设cronjob正在运行(正如你所说的那样),这应该捕获输出并希望指出问题是什么。确保发布该文件的内容。

答案 1 :(得分:2)

只是为了加速而不必阅读所有这些评论。我遇到了同样的问题,即cronjob没有找到Python可执行文件。所以我找了它:

whereis python2.7

通过该位置,我编辑了我的crontab:

crontab -e

最后,我的任务看起来像这样:

0 */6 * * * /usr/local/bin/python2.7 ~/webapps/proj/app/manage.py poll_twitter

现在就像魅力一样。

答案 2 :(得分:1)

根据您的sript中的逻辑,您的manage.py位于运行cron的用户的主目录中。我怀疑这是真的。

像这样调整你的cron任务:

*/05 * * * * python2.7 /absolute/path/to/manage.py updateTime

这应解决问题。