无法让Crontab工作

时间:2010-06-22 17:06:59

标签: python linux crontab

我一直试图让crontab工作一段时间但它似乎并不想工作。我需要初始化每个午夜的python脚本从命令终端完美运行。我的python脚本的位置是:

  

/home/rv/ncbi-blast-2.2.23+/database_backup/backup.py

我的标签看起来像这样:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/home/rv/ncbi-blast-2.2.23+/database_backup
MAILTO=root
HOME=/
# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  *  command to be executed
0 0 * * * /usr/bin/python /home/rv/ncbi-blast-2.2.23+/database_backup/backup.py

我的python脚本如下所示:

#!/usr/bin/python

from subprocess import Popen
import datetime

today = datetime.date.today()

today = str(today)

#print today

f = open("/home/rv/ncbi-blast-2.2.23+/database_backup/%s.sql" % (today), "w")
x =  Popen(["mysqldump", "-u", "root", "-p*****", "normalisation"], stdout = f)
x.wait()
f.close()

知道我哪里出错了?


只是查看了cron日志,我每次尝试的条目都得到了这个

(root) BAD FILE MODE (/etc/crontab)

我尝试使用shell脚本时也遇到了同样的错误

4 个答案:

答案 0 :(得分:1)

如果它适用于您的用户帐户但不适用于cron,则通常不是cron。 cron守护程序尝试启动您的应用程序,但由于它没有设置环境变量,它将失败。创建一个简单的shell脚本来设置环境变量并启动python脚本。 (您没有PATH,因此您必须使用完整路径名等。)

查看您的脚本,您可以使用shell脚本命令轻松完成所有这些操作。 Shell脚本被大大低估了。

答案 1 :(得分:1)

也许不是使用Python,而是制作一个bash脚本:

mysql_backup.sh

#!/bin/bash
/PATH/TO/mysqldump -u root -p***** normalisation > /SOMEOTHER/PATH/TO/$(date '+%Y-%m-%d').sql

并将其放在您的crontab中:

0 0 * * * /PATH/TO/mysql_backup.sh 

答案 2 :(得分:1)

您只需检查crontab cmd,然后手动执行这些cmd,例如

/usr/bin/scrond run-parts /etc/cron.daily

答案 3 :(得分:0)

我不知道你哪里出错了,但你可以将stderr和stdout重定向到你的crontab条目中的一个文件,这可能会给你一个提示。我的语法记忆很生疏,但它类似于<yourfile>.py &> errors.txt

当然,这也引入了另一个失败点,即您无权在任何放置errors.txt的地方写入。 ; - )