cron - задание на срабатывает
Хочу сделать периодический бэкап базы.
Сначала я написал скрипт, который всё делает. Сделал, чтобы он не зависел от переменных окружения - прочитал заранее про трудноссти с кроном.
Дописал в /etc/crontab строчку
00 23 * * 1-5 root /mssql_data/Backups/backup.sh
... и на следующе утро увидел, что скрипт не сработал и в логах, котрые я вижу по команде grep CRON /var/log/syslog нет записей, относящихся к дописанной строчке.
Понял, что cron я готовить не умею :-)
Исправил команду на ту, проще которой придумть не смог:
30 11 * * 1-5 root cp /mssql_data/Backups/test.sh /mssql_data/Backups/test1.sh
Она - как видите - должна сскопировать существующий файл test.sh в другой файл.
Команда также не выполняется.
Проверил - командой ps -A | grep cron - что cron в списке процессов есть.
При этом в логах grep CRON /var/log/syslog я вижу записи о выполнеи по крону другмих команд, например:
Oct 28 07:17:01 LB3 CRON[312501]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Oct 28 08:17:01 LB3 CRON[313928]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Может, этот cron надо как то перезапускть, или как то еще "говорить" ему, что я в файл дописал для него новую команду? Или еще какая то причина, что мой скрипт не работает?
Спасибо за советы!
Дополнение
Уважаемые AlexeyTen и ipatev_nn, спасибо большео за Ваши советы!
я даже не ожидал, что мне будет оказана такая помощь в решении проблемы.
Пока проблема еще не решена, несмотря на советы, хотя я придумал ловкий костыль: каждый час запускать задание, в которм смотреть "а не наступил ли нужный час?" и если наступил - делать бэкап :-)
Теперь о том, что на сервере:
вывод команды timedatectl:
Local time: Thu 2021-10-28 17:22:33 MSK
Universal time: Thu 2021-10-28 14:22:33 UTC
RTC time: Thu 2021-10-28 14:22:33
Time zone: Europe/Moscow (MSK, +0300)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
вывод команды grep "TZ" /etc/cron.d/* /etc/crontab - пустой
Попытка получить $TZ из переменных окружения крона - показывает, что такой переменной нет или она пустая (то есть, файл создаётся, туда пишется пустота)
Вообще, я сделал printenv от имени крона и увидел, что переменных там кот наплакал:
HOME=/root
LOGNAME=root
PATH=/usr/bin:/bin
LANG=en_US.UTF-8
SHELL=/bin/sh
PWD=/root
вывод команды sudo hwclock -D: (без sudo работать не хотела)
hwclock: use --verbose, --debug has been deprecated.
2021-10-28 17:37:22.885307+03:00
Самое смешное - я уверен что перезагрузка сервака решила бы проблему. Но перезагружать его крайне нежелательно...
Дополнение 2
Напомню, с чего всё началось: я подключился к серваку, обнаружил, что часы идут по UTC. Настроил таймзону. Перезапустил крон и сислог. получил в них вроде бы правильное время. Но... задания в кроне, поставленные на определенный час и минуту - не срабатывали.
Вообще, идея ipatev_nn поставить задание по часам в UTC - была крутая. Я "завел будильник" на 15:00, и в 18:00 задание выполнилось и... вывело в файл, что сейчас 18:00 (что, конечно же, правда). Даже sudo hwclock --debug не понадобился.
В общем, гитика такая: завожу будильник на три часа раньше, до тех пор, пока сервер не перезагрузится в силу естественных причин :-) потом можно будет заводить по человечески.
А разгадка, похоже, крылась в том, что команда sudo hwclock --verbose пишет вот что:
hwclock from util-linux 2.34
System Time: 1635439601.588493
Trying to open: /dev/rtc0
Using the rtc interface to the clock.
Assuming hardware clock is kept in UTC time.
Waiting for clock tick...
...got clock tick
Time read from Hardware Clock: 2021/10/28 16:46:42
Hw clock time : 2021/10/28 16:46:42 = 1635439602 seconds since 1969
Time since last adjustment is 1635439602 seconds
Calculated Hardware Clock drift is 0.000000 seconds
2021-10-28 19:46:41.577108+03:00
И еще раз, на картинке, где подчеркнуто время, на которое, веротяно, и "смотрит" cron:
Ответы (2 шт):
Проверьте тот же лог /var/log/syslog.
Например я сделал ошибку и вот что там пишут:
$ fgrep cron /var/log/syslog
[...]
Oct 28 13:31:01 hera cron[1096]: Error: bad minute; while reading /etc/cron.d/cron-check
Oct 28 13:31:01 hera cron[1096]: (*system*cron-check) ERROR (Syntax error, this crontab file will be ignored)
Сейчас все же складывается впечатление, что проблемы со временем все же присутствуют на сервере, а если основываться на комментарии:
Сейчас результат такой: я могу запустить скрипт каждый час (30 * * * * root tst.sh).
То вероятнее всего именно с часовыми поясами.
Рекомендую проверить:
timedatectl- корректность настроенного времени и часового поясаgrep "TZ" /etc/cron.d/* /etc/crontab- возможно часовой пояс установлен для самого задания cron* * * * * root echo "$TZ" > /tmp/croncheck.tmp- так как данную переменную cron может брать из окружения, добавить задание и проверить, что записывается пустота или корректная временная зонаhwclock -D- проверка аппаратного времени, выведет время и часовой пояс в системе.
В случае если это не поможет в исправлении проблемы, то приложите вывод команд из пункта 1 и 4 к вопросу
