У меня установлено одно задание 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.