以下 cron 作业无法执行。它出了什么问题?当我直接从 shell 提示符运行它时,它工作正常。
www-data@etl:~$ crontab -l
SHELL=/bin/bash
MAITO=""
0 5 * * * export YESTERDAY=$(date --date "yesterday" "+%Y-%m-%d"); cd /var/www/project && source .env/bin/activate && ./manage.py get_orders --date="$YESTERDAY" && sleep 5m && time ./manage.py merch --date="$YESTERDAY" && time ./manage.py order_flat_report --date="$YESTERDAY" && time ./manage.py update_hourly_report --date="$YESTERDAY"
我收到此错误信息:
Return-Path: <www-data@etl>
X-Original-To: www-data
Delivered-To: www-data@etl
Received: by localhost (Postfix, from userid 33)
id E170C43EC7; Fri, 18 Apr 2014 05:00:01 -0400 (EDT)
From: root@etl (Cron Daemon)
To: www-data@etl
Subject: Cron <www-data@etl> export YESTERDAY=$(date --date "yesterday" "+
Content-Type: text/plain; charset=ANSI_X3.4-1968
X-Cron-Env: <SHELL=/bin/bash>
X-Cron-Env: <MAITO=>
X-Cron-Env: <HOME=/var/www>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=www-data>
Message-Id: <20140418090001.E170C43EC7@localhost>
Date: Fri, 18 Apr 2014 05:00:01 -0400 (EDT)
/bin/bash: -c: line 0: unexpected EOF while looking for matching `"'
/bin/bash: -c: line 1: syntax error: unexpected end of file
- Ubuntu 13.10(GNU/Linux 3.11.0-14-通用 x86_64)
- GNU bash,版本 4.2.45(1)-发布(x86_64-pc-linux-gnu)
答案1
看起来 cron 在将命令传递给 bash 时没有正确转义命令中的某些引号。正如 Florin 所建议的,您可以将命令放入 shell 脚本中,使其可执行,将其存储在例如 中/usr/local/bin
,然后将其作为 cronjob 运行。
如果作业是否准时在 05:00 运行并不重要,您也可以将脚本放入其中/etc/cron.daily/
,从而无需从 crontab 调用它。