Назад | Перейти на главную страницу

Почему (ana) cron не выполняет ни одно из моих заданий и не выдает ошибок?

У меня установлено одно задание cron, но оно не запущено. Я установил его с crontab -e и вошел следующее.

0 12 * * * /var/www/drupal/scripts/dump_sites
* * * * * wall /tmp/test

Вторую команду поставил для тестирования. Действительно, есть файл / tmp / test, в нем просто есть «это тест».

Когда я выхожу crontab -e Я не получаю сообщений об ошибках. Нет файлов журнала для cron в /var/log/. Я остановил cron с помощью service cron stop и попытался запустить его с cron -L 2 чтобы получить лучший результат отладки, но журналов по-прежнему нет.

Я побежал /var/www/drupal/scripts/dump_sites вручную, и я получаю ожидаемое поведение, т.е. выходные файлы появляются там, где я хочу. Когда я пытаюсь использовать cron, я не получаю ожидаемого поведения.

Когда я делаю ps aux | grep cron Я вижу это с идентификатором связанного процесса.

Я на мгновение отказался от cron и попробовал anacron. ps aux | grep cron теперь дает следующее. Тем не мение; мой dump_sites скрипт по-прежнему не запускается.

devcampus :: /var/www/drupal » ps aux | grep cron   
root     15635  0.0  0.1  12440   928 ?        Ss   11:59   0:00 anacron -f
root     15816  0.0  0.1   4092   608 ?        S    12:04   0:00 /bin/sh -c nice run-parts --report /etc/cron.daily
root     15818  0.0  0.1   3996   620 ?        SN   12:04   0:00 run-parts --report /etc/cron.daily
root     15825  0.0  0.1   4092   680 ?        SN   12:04   0:00 /bin/sh /etc/cron.daily/apt

Мой /etc/anacrontab файл выглядит так.

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# These replace cron's entries
1       5       cron.daily       nice run-parts --report /etc/cron.daily
7       10      cron.weekly      nice run-parts --report /etc/cron.weekly
@monthly        15      cron.monthly nice run-parts --report /etc/cron.monthly

# period  delay  job-identifier  command
@daily    14     backup          /var/www/drupal/scripts/dump_sites

Я использую Ubuntu 10.04, и я считаю, что этот ящик работает на сервере виртуализации Xen.

devcampus :: /var/www/drup
2.6.32-23-server

Обновление: видимо работает с анакроном.


По запросу вот dump_sites:

#!/usr/bin/env ruby

DRUPAL_ROOT = File.expand_path(File.dirname(__FILE__) + '/../')
SITES_ROOT = File.join(DRUPAL_ROOT, 'sites')
CONFIG_FILES = Dir.glob(File.join(SITES_ROOT, "*", "dbconfig.php"))

databases = CONFIG_FILES.map do |cf|
  contents = File.read(cf)
  contents =~ /dbname='(.*)'/ ? $1 : nil
end

databases.uniq!
databases.sort!

databases.each do |db|
  file_name = File.join(DRUPAL_ROOT, "db_dumps", "#{db}_#{Time.now.strftime("%Y-%m-%d-%H-%M-%S")}.sql")
  `mysqldump -uusername -ppassword #{db} > #{file_name}`
end

Просто старый добрый рубиновый скрипт.

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

Ваш cron запускается, и вы должны войти в систему /var/log/syslog. Если есть ошибки, вы должны получить электронное письмо.

Обычно, когда сценарий запускается из командной строки, а не из cron это из-за разницы в окружающей среде. Хорошая идея - установить PATH переменная явно и / или использовать полные пути ко всем файлам и исполняемым файлам. Я вижу, что ты сделал это в своем crontab запись, но вам следует проверить сам скрипт.

В дополнении к PATH могут быть другие зависимости от среды, которые есть у вашего скрипта. Не видя этого, я не могу догадаться, что они могут быть.

cron ошибки обычно отправляются на почту. Вы пробовали это проверить? Просто введите mail в командной строке, и вы можете увидеть список сообщений от cron.