ОС: Ubuntu 16.04
Я просмотрел много разных статей и тем, но до сих пор не могу понять cron.hourly
задания для автоматического запуска. Я пытаюсь создать резервную копию своей базы данных PostgreSQL. В /etc/cron.hourly
, У меня есть только один сценарий с именем pg_backup
. Вот разрешения на это:
-rwxr-xr-x 1 root root 1543 Oct 16 19:07 pg_backup
Если я сбегу run-parts --test /etc/cron.hourly
, вывод будет следующим:
/etc/cron.hourly//pg_backup
Выглядит хорошо. Если я запустил сценарий, используя run-parts
вручную, он работает должным образом и выполняет резервное копирование моей базы данных. Вот команда, которую я использую:
run-parts -v --report /etc/cron.hourly
Это здорово, но по какой-то причине он не запускается каждый час сам по себе. Я действительно не знаю, что могло быть не так. Я проверил все журналы и не нашел сообщений об ошибках.
Что мне не хватает?
ОБНОВИТЬ
Я заметил, что мой /etc/crontab
файл имеет оболочку, указанную так: SHELL=/bin/sh
. Мой скрипт работает в bash. Достаточно ли наличия shebang в верхней части моего скрипта для использования bash? #!/bin/bash
ОБНОВЛЕНИЕ 2
Как предложил Broco, я поместил задание в свой crontab, но оно все еще не работает. Вот что я сделал:
sudo crontab -e
Затем я добавил в файл следующее:
* * * * * root /etc/cron.hourly/pg_backup
Я заставил его запускаться каждую минуту, чтобы быстрее получать информацию о том, работает он или нет, и кажется, что он работает, но на самом деле не выполняет резервное копирование.
Вот часть моего системного журнала. Я использовал команду grep CRON /var/log/syslog
:
Oct 17 14:02:01 User CRON[63871]: (root) CMD (root /etc/cron.hourly/pg_backup)
Oct 17 14:02:01 User CRON[63870]: (CRON) info (No MTA installed, discarding output)
Oct 17 14:03:01 User CRON[63917]: (root) CMD (root /etc/cron.hourly/pg_backup)
Oct 17 14:03:01 User CRON[63916]: (CRON) info (No MTA installed, discarding output)
Oct 17 14:04:01 User CRON[63966]: (root) CMD (root /etc/cron.hourly/pg_backup)
Oct 17 14:04:01 User CRON[63965]: (CRON) info (No MTA installed, discarding output)
Oct 17 14:05:01 User CRON[64013]: (root) CMD (root /etc/cron.hourly/pg_backup)
Oct 17 14:05:01 User CRON[64012]: (CRON) info (No MTA installed, discarding output)
Oct 17 14:05:01 User CRON[64014]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Oct 17 14:06:01 User CRON[64060]: (root) CMD (root /etc/cron.hourly/pg_backup)
Oct 17 14:06:01 User CRON[64059]: (CRON) info (No MTA installed, discarding output)
Oct 17 14:07:01 User CRON[64106]: (root) CMD (root /etc/cron.hourly/pg_backup)
Oct 17 14:07:01 User CRON[64105]: (CRON) info (No MTA installed, discarding output)
Я понял! Как заметил Майкл Хэмптон, моя работа выполнялась, но с некоторыми ошибками. У меня не было установленного MTA, поэтому я установил postfix
с участием sudo apt-get install postfix
. После этого я смог посмотреть на /var/mail/root
файл, чтобы увидеть сообщения об ошибках, связанных с моим cron
рабочие места.
Моя основная проблема в конечном итоге была связана с отсутствием переменных среды. поскольку cron
работает на root
, мои переменные среды не устанавливались при запуске скрипта. Итак, я включил свой .bashrc
вверху моего скрипта вот так:
source "$HOME/.bashrc"
В моем root
пользователь .bashrc
, Я добавил переменные среды, которые мне нужны для скрипта. Однако это все еще не сработало; переменные среды все еще не устанавливались при запуске скрипта. Чтобы исправить это, я добавил в свой сценарий следующую строку перед строкой, включающей .bashrc
:
export PS1="1"
Из эта тема, эта переменная среды предотвращает .bashrc
от загрузки в неинтерактивных сеансах, поэтому, когда он установлен, .bashrc
загрузится.
Всем большое спасибо за помощь!
Ваша работа cron является работает, но возникла проблема.
Обычно вы должны получать электронное письмо с выводом (и ошибками!), Но вы не получаете его, потому что:
Oct 17 14:02:01 User CRON[63870]: (CRON) info (No MTA installed, discarding output)
В вашей системе не установлено ничего, что могло бы отправлять почту. Таким образом, вывод выбрасывается.
Рассматривать установка MTA так что вы можете получить результат по электронной почте, а затем узнать, что на самом деле происходит.