Не могу заставить Crontab работать - PullRequest
4 голосов
/ 22 июня 2010

Я пытался заставить crontab работать некоторое время, но, похоже, он не хочет работать.Скрипт python, который мне нужно инициализировать каждую полночь, прекрасно работает из командного терминала.Расположение моего скрипта на python:

/ 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)

Я получал ту же ошибку, когда пытался с помощью сценария оболочки, а также

Ответы [ 4 ]

1 голос
/ 14 сентября 2011

Вы можете просто проверить crontab cmd и выполнить его вручную, например,

/usr/bin/scrond run-parts /etc/cron.daily
1 голос
/ 22 июня 2010

Если это работает из вашей учетной записи пользователя, но не из cron, обычно это не cron.Демон cron пытается запустить ваше приложение, но, поскольку он не устанавливает переменные среды, он потерпит неудачу.Создайте простой сценарий оболочки, чтобы настроить переменные среды и запустить сценарий Python.(У вас нет PATH, поэтому вы должны использовать полные пути и т. Д.)

Глядя на свой сценарий, вы можете довольно легко сделать все это, используя только команды сценария оболочки.Сценарии оболочки значительно недооценены.

1 голос
/ 22 июня 2010

Возможно, вместо использования 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 голосов
/ 22 июня 2010

Я понятия не имею, где вы идете не так, но вы можете перенаправить stderr и stdout в файл в вашей записи crontab, который может дать вам подсказку.Моя синтаксическая память ржавая, но это что-то вроде <yourfile>.py &> errors.txt

Конечно, это также вводит еще одну точку сбоя, которая заключается в том, что у вас нет разрешения писать туда, куда вы помещаете ошибки.txt.; -)

...