2010-06-22 145 views
4

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

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

我contab看起来是这样的:

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脚本试图藏汉

+0

愚蠢的问题,但是是运行的cron守护进程? – 2010-06-22 17:08:13

+0

只需双重检查,是的它是 – Craig 2010-06-22 17:08:45

+1

您的crontab PATH不包含'/ usr/local/bin'。但是你的python shebang行引用'/ usr/local/bin/python'。也许在crontab PATH中加入'/ usr/local/bin',和/或明确调用脚本: '0 0 * */usr/local/bin/python /home/rv/ncbi-blast-2.2.23 +/database_backup/backup.py' – unutbu 2010-06-22 17:11:35

回答

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 
+0

愚蠢的问题,我会把脚本放在哪里? – Craig 2010-06-22 17:49:31

+0

你可以把脚本放在'/ usr/local/sbin'中,在这里本地安装的程序通常用于系统管理。 – unutbu 2010-06-22 18:21:23

+0

我试着用shell脚本,但再次没有运气,看看cron日志,并有此: “(root)坏文件模式(/ etc/crontab)” – Craig 2010-06-22 19:04:13

0

我不不知道你错在哪里,但是你可以将stderr和stdout重定向到你的crontab项中的一个文件,这可能会给你一个提示。我的语法内存是生锈的,但它是这样的<yourfile>.py &> errors.txt

当然,这也引入了另一个失败点,这就是说,你没有权限写入无论你把errors.txt放在哪里。 ;-)

1

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

查看脚本,您可以使用shell脚本命令轻松完成所有操作。 壳牌脚本的评价很低。

+0

我同意,对于像这样的东西,Python只是让它变得更加单纯。一个bash脚本更适合。这可能是正确的答案; PATH问题是cron工作无法正常工作的头号罪魁祸首。我通常在cron作业中使用完整路径以避免麻烦。 – Ibrahim 2010-06-22 17:32:15

1

你可以只检查crontab的CMD,并手动执行这些cmd,例如

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