我创建了以下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
答案 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
这应解决问题。